Неопределенные ссылки на символы libm после обновления Linux distro - PullRequest
2 голосов
/ 03 мая 2020

Я обновил свой Linux дистрибутив с Pop OS 19.10 до 20.04, и он естественно включал в себя обновления до glib c & co. С тех пор я начал получать ошибки компоновщика для символов libm, таких как __pow_finite.

К сожалению, код, который ссылается на эти символы, представляет собой библиотеку stati c (libWithPowFiniteRef.a в отредактированном фрагменте ниже) с третьим партийный фирменный код. У меня нет доступа к источнику.

Я проверил /lib/x86_64-linux-gnu/libm.so.6, используя nm. Здесь есть символ:

nm -gD /lib/x86_64-linux-gnu/libm.so.6
...
0000000000010e00 W powf64x
00000000000471f0 i __powf_finite
000000000002ed90 i __pow_finite
0000000000010e00 W powl
0000000000019860 T __powl_finite
...

Поэтому я не могу объяснить ошибки:

g++  -o ./media_tests -Wl,--verbose -Wl,--start-group @"./media_tests.rsp"  -ldl -lpthread -lrt ../../third_party/other.so  ../../third_party/redacted/lib/Linux/x64/libWithPowFiniteRef.a -Wl,--end-group
...
attempt to open /usr/lib/gcc/x86_64-linux-gnu/9/libm.so failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/9/libm.a failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.so succeeded
...
attempt to open /usr/lib/gcc/x86_64-linux-gnu/9/libm.so failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/9/libm.a failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.so succeeded
opened script file /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.so
/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.so
opened script file /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/libm.so
attempt to open /lib/x86_64-linux-gnu/libm.so.6 succeeded
/lib/x86_64-linux-gnu/libm.so.6
...
/usr/bin/ld:../../third_party/redacted/lib/Linux/x64/redacted.a(redacted.o): in function `RedactedX':
redacted1.c:(.text+0xbb0): undefined reference to `__pow_finite'
/usr/bin/ld: ../../third_party/redacted/lib/Linux/x64/redacted.a(redacted.o): in function `RedactedY':
redacted2.c:(.text+0x7ad9): undefined reference to `__pow_finite'
/usr/bin/ld: redacted.c:(.text+0x8c74): undefined reference to `__pow_finite'
/usr/bin/ld: link errors found, deleting executable `./media_tests'

Может быть, мы решили запросить у поставщика новую статистику c lib, но я хотел бы понять, почему.

...