Неопределенная ссылка на xdr_string в GNU libc 2.31

Должен ли xdr_string быть частью glibc? Я получил неопределенную ссылку на xdr_string с glibc 2.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.so.6»?


113
1

Ответ:

Решено

Должен ли xdr_string быть частью glibc?

xdr_*функции являются частью пакета SunRPC, который был удален (после многих лет устарел).

Побочный вопрос: «-lc» указан для «ld», как он разрешается в «libc.so.6»?

Найдите ответ здесь.