gcc GNU libc 2中未定义的对“xdr_string”的引用,31

xqk2d5yq  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(277)

xdr_string应该是glibc的一部分吗?我在glibc 2中得到了对xdr_string的未定义引用。31.我检查了符号,似乎所有的xdr_*方法都有@GLIBC_2。2.5后缀。

% rpm -qf libc.so.6
glibc-2.31-7.30.x86_64
% nm libc.so.6 |grep "\b xdr_"
0000000000126970 T xdr_accepted_reply@GLIBC_2.2.5
0000000000132850 T xdr_array@GLIBC_2.2.5
00000000001285b0 T xdr_authdes_cred@GLIBC_2.2.5
0000000000128630 T xdr_authdes_verf@GLIBC_2.2.5
0000000000124b20 T xdr_authunix_parms@GLIBC_2.2.5

它在glibc 2上运行良好。22

% rpm -qf libc.so.6
glibc-2.22-114.22.1.x86_64
% nm libc.so.6 |grep "\b xdr_"
00000000001125d0 T xdr_accepted_reply
000000000011d3d0 T xdr_array
0000000000114020 T xdr_authdes_cred
00000000001140b0 T xdr_authdes_verf
00000000001108a0 T xdr_authunix_parms

这是glibc 2的预期。31?如何正确解析参考xdr_string@GLIBC_2.2.5
我四处搜索,似乎有一些asm指令__asm__(".symver ...,但在我的情况下,xdr_string被我链接到的第三方库libnl使用,我不能改变库本身。

% g++ main.c libnl.a -ldl -lpthread libmycrypto.so
/usr/x86_64-suse-linux/bin/ld: libnl.a(nl2.o): in function `xdr_stringUC16':
/bas/src/flat/nl2.c:559: undefined reference to `xdr_string'
/usr/x86_64-suse-linux/bin/ld: /bas/src/flat/nl2.c:566: undefined reference to `xdr_string'
/usr/x86_64-suse-linux/bin/ld: /bas/src/flat/nl2.c:579: undefined reference to `xdr_string'
/usr/x86_64-suse-linux/bin/ld: /bas/src/flat/nl2.c:579: undefined reference to `xdr_free'
collect2: error: ld returned 1 exit status

顺便说一句:一个附带问题,“-lc”是为“ld”指定的,它是如何解析为“libc”的。6”?

qgzx9mmu

qgzx9mmu1#

xdr_string应该是glibc的一部分吗?
xdr_*函数是SunRPC包的一部分,它已经是removed(在被弃用多年之后)。
一个附带问题,“-lc”是为“ld”指定的,它如何解析为“libc”。6”?
找到答案here

相关问题