Кто-нибудь знает, как связать с `ld` на` WSL`? - PullRequest
0 голосов
/ 26 февраля 2020

Я собираю тестовую программу на clion, используя подсистему windows для linux WSL. Я использую dlopen et c. загрузить библиотеку во время выполнения. Я получаю сообщение об ошибке:

CMakeFiles/test.dir/test_add.cpp.o: In function `test_test_add_windows_Test::TestBody()':
/mnt/d/ACrossPlatformCppLibrary/test/test_add.cpp:26: undefined reference to `dlopen'
/mnt/d/ACrossPlatformCppLibrary/test/test_add.cpp:28: undefined reference to `dlsym'

Отчеты , похоже, указывают на то, что мне нужно связать с ld. Тем не менее, добавление

target_link_libraries(ACrossPlatformCppLibrary "${CMAKE_DL_LIBS}")

не работает, что не удивительно, поскольку похоже, что "${CMAKE_DL_LIBS}" пусто на windows. Поэтому я попытался вручную указать путь к ld

target_link_libraries(ACrossPlatformCppLibrary "/usr/bin/ld")

Кто-нибудь знает, как связываться с ld при WSL?

update

Благодаря комментариям и ответу @squareskittles я заметил, что двоичный файл dl недоступен в системном пути. При ближайшем рассмотрении не похоже, что двоичный файл dl вообще существует в WSL. Вот вырезка и вставка из каталога, я думаю, dl должен быть в:

$ cd /lib
$ ls
apparmor       hdparm                                libhandle.so.1.0.3  netplan        udev
console-setup  init                                  lsb                 open-iscsi     ufw
cpp            klibc-wBFLvVtxy4xJqEadIBJMa78iJz8.so  modprobe.d          recovery-mode  x86_64-linux-gnu
cryptsetup     **ld-linux.so.2**                         modules             systemd
ebtables       libhandle.so.1                        modules-load.d      terminfo

1 Ответ

3 голосов
/ 26 февраля 2020

Я думаю, что вы путаете флаг библиотеки ссылок GNU -l с именем библиотеки dl, которое вместе на этапе соединения отображается как -ldl. Если библиотека находится в системном пути (WSL), вам также не нужен полный путь к библиотеке. Вы можете просто поместить имя библиотеки dl в эту команду:

 target_link_libraries(ACrossPlatformCppLibrary PRIVATE dl)

Для чего стоит, библиотека libdl.so на WSL должна быть расположена здесь, если у вас установлены правильные пакеты:

/lib/x86_64-linux-gnu/libdl.so.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...