编译nebula-third-party三方包报错,求大神解惑

编译nebula-third-party报错?
环境:suse x86 glibc版本为2.22, gcc g++版本为9.3.0 ,nebula-third-party版本为v3.0
编译到cyrus-sasl组件时报错。
报错信息如下:

/usr/bin/ld: skipping incompatible /usr/lib//libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib//libcrypt.so when searching for -lcrypt
/usr/bin/ld: skipping incompatible /usr/lib//libresolv.so when searching for -lresolv
/usr/bin/ld: skipping incompatible /usr/lib//libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib//libc.so when searching for -lc
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
make[5]: *** [sasldblistusers2] Error 1
make[5]: *** Waiting for unfinished jobs....
/usr/bin/ld: skipping incompatible /usr/lib//libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib//libcrypt.so when searching for -lcrypt
/usr/bin/ld: skipping incompatible /usr/lib//libresolv.so when searching for -lresolv
/usr/bin/ld: skipping incompatible /usr/lib//libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib//libc.so when searching for -lc
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
/usr/bin/ld: skipping incompatible /usr/lib//libdl.so when searching for -ldl
/usr/bin/ld: skipping incompatible /usr/lib//libcrypt.so when searching for -lcrypt
/usr/bin/ld: skipping incompatible /usr/lib//libresolv.so when searching for -lresolv
/usr/bin/ld: skipping incompatible /usr/lib//libpthread.so when searching for -lpthread
/usr/bin/ld: skipping incompatible /usr/lib//libc.so when searching for -lc
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
make[5]: *** [pluginviewer] Error 1

:thinking: 为啥重新开个帖子呢,你可以直接在原来的链接上更新啊,如果你觉得问题没解决的话,传送 编译nebula-third-party源码,报错. 求大神解惑

之前那个suse x86 版本是15,glibc的版本是2.26,三方件是编译成功了的。 现在这个suse x86环境是12.5,glibc的版本是2.22, 编译到5%时报错了

1 个赞

:joy: 你搞编译搞的好全面啊,我喊我们的大佬给你瞅瞅。

主要是有用到这个版本啊。

你可能在32bit上link 64位的文件了
可以打印一下uname -a看看现在的系统版本

kwepwebenv17535:/opt # file /usr/lib/libdl.so
/usr/lib/libdl.so: symbolic link to /lib/libdl.so.2
kwepwebenv17535:/opt # file /usr/lib/libcrypt.so
/usr/lib/libcrypt.so: symbolic link to /lib/libcrypt.so.1
kwepwebenv17535:/opt # file /usr/lib/libresolv.so
/usr/lib/libresolv.so: symbolic link to /lib/libresolv.so.2
kwepwebenv17535:/opt # file /usr/lib//libpthread.so
/usr/lib//libpthread.so: ASCII text
kwepwebenv17535:/opt # file /usr/lib/libpthread.so
/usr/lib/libpthread.so: ASCII text
kwepwebenv17535:/opt # file /usr/lib/libc.so
/usr/lib/libc.so: ASCII text

如果是link的,麻烦再file一下link后的文件

kwepwebenv17535:/usr/lib # ls -la | grep libdl*
lrwxrwxrwx 1 root root 15 Mar 25 2021 libdl.so → /lib/libdl.so.2
kwepwebenv17535:/lib # ls -la | grep libdl.so.2
lrwxrwxrwx 1 root root 13 Mar 25 2021 libdl.so.2 → libdl-2.22.so
kwepwebenv17535:/lib # ls -la| grep libdl-2.22.so
-rwxr-xr-x 1 root root 17044 Jun 21 2019 libdl-2.22.so
lrwxrwxrwx 1 root root 13 Mar 25 2021 libdl.so.2 → libdl-2.22.so

kwepwebenv17535:/lib # cd /usr/lib
kwepwebenv17535:/usr/lib # ls -la | grep libcrypt.so
lrwxrwxrwx 1 root root 18 Mar 25 2021 libcrypt.so → /lib/libcrypt.so.1
kwepwebenv17535:/usr/lib # cd /lib
kwepwebenv17535:/lib # ls -la | grep libcrypt.so.1
lrwxrwxrwx 1 root root 16 Mar 25 2021 libcrypt.so.1 → libcrypt-2.22.so
kwepwebenv17535:/lib # ls -la| grep libcrypt-2.22.so
-rwxr-xr-x 1 root root 59728 Jun 21 2019 libcrypt-2.22.so
lrwxrwxrwx 1 root root 16 Mar 25 2021 libcrypt.so.1 → libcrypt-2.22.so

这些都只是链接,麻烦给连接到的最终文件的file执行结果


图中的lib文件是32bit的,你系统是64bit的所以会报错。正常情况下应该为64bit,请检查自己的开发环境。

1 个赞

现在环境的错不报了,然后三方包里面显示函数链接不了,会不会是插件的问题啊。

dbconverter-2.c:382:23: warning: cast between incompatible function types from ‘int (*)(void *, const char *, const char *, const char **, unsigned int *)’ to ‘int (*)(void)’ [-Wcast-function-type]
  382 |     { SASL_CB_GETOPT, (int (*)(void))&good_getopt, NULL },
      |                       ^
dbconverter-2.c: In function ‘main’:
dbconverter-2.c:431:19: warning: cast between incompatible function types from ‘void (*)(const char *, const char *, const char *, const char *, unsigned int)’ to ‘void * (*)(const char *, const char *, const char *, const char *, unsigned int)’ [-Wcast-function-type]
  431 |     listusers(db, (listcb_t *) &listusers_cb);
      |                   ^
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
make[5]: *** [pluginviewer] Error 1
make[5]: *** Waiting for unfinished jobs....
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
make[5]: *** [sasldblistusers2] Error 1
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_dispose':
otp.c:(.text+0xfc): undefined reference to `opieverify'
/usr/bin/ld: ../lib/.libs/libsasl2.a(otp.o): in function `opie_server_mech_step':
otp.c:(.text+0x2fd): undefined reference to `opiechallenge'
/usr/bin/ld: otp.c:(.text+0x369): undefined reference to `opieverify'
collect2: error: ld returned 1 exit status
make[5]: *** [saslpasswd2] Error 1
make[5]: *** [dbconverter-2] Error 1
make[4]: *** [all-recursive] Error 1
make[3]: *** [all] Error 2

这是哪里来的报错? 编译third party的过程中报的吗? 如果是的话,是在编译哪个组件的时候报错的呢?
另外你说的插件是指什么

编译三方件的时候报的错,三方件里面的组件是cyrus-sasl. 我把三方件说成插件了

提示这个函数opieverify找不到申明的地方,我把三方件里面的cyrus-sasl源码包解压后搜索了一遍,确实没有找到申明的地方

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。