ld игнорирует библиотеки - PullRequest
       31

ld игнорирует библиотеки

0 голосов
/ 04 ноября 2011

Компоновщик в Ubuntu 11.10, похоже, игнорирует библиотеки, которые я указал в строке ссылки, если они не содержат символов, используемых связанным приложением:

Linking CXX executable ../../bin/gpu_sd_list
cd /home/eile/Software/gpu-sd/debug/apps/gpu_sd_list && /usr/bin/cmake -E cmake_link_script CMakeFiles/gpu_sd_list.dir/link.txt --verbose=1
/usr/bin/c++    -Wall -Wextra -Winvalid-pch -Wnon-virtual-dtor -Wsign-promo -Wshadow -Winit-self -Wno-unknown-pragmas -Wno-unused-parameter -Wno-write-strings -Werror -g    CMakeFiles/gpu_sd_list.dir/gpu_sd_list.cpp.o  -o ../../bin/gpu_sd_list -rdynamic ../../lib/libgpusd_remote_dns_sd.so.1.0.0 -ldns_sd ../../lib/libgpusd_remote.so.1.0.0 -Wl,-rpath,/home/eile/Software/gpu-sd/debug/lib: 

ldd ./debug/bin/gpu_sd_list
linux-vdso.so.1 =>  (0x00007fff0a5c6000)
libgpusd_remote.so.1 => /home/eile/Software/gpu-sd/debug/lib/libgpusd_remote.so.1 (0x00007ff9a21fc000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff9a1ece000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff9a1cb7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff9a1918000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff9a1694000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff9a2406000)

отсутствует libgpusd_remote_dns_sd.so.1.0.0. Это работает в Ubuntu 11.04. Библиотека содержит статический инициализатор, регистрирующий модуль в библиотеке gpusd_remote. Если он не загружен при запуске программы, функциональность отсутствует. Полный источник в https://github.com/Eyescale/gpu-sd

1 Ответ

2 голосов
/ 04 ноября 2011

Вы можете сделать что-то вроде:

.... -Wl,-no-as-needed -lfoo -lbar -Wl,-as-needed

Это будет ссылаться на libfoo и libbar независимо от того, действительно ли они нужны или нет.

as-needed являетсянастройка по умолчанию в некоторых дистрибутивах, поскольку в большинстве случаев имеет смысл.

(хотя я не уверен, что ваш дизайн - хорошая идея.)

...