Clang Linking с SO

Я продолжаю получать

ld: library not found for -lchaiscript_stdlib-5.3.1.so
clang: error: linker command failed with exit code 1 (use -v to see invocation)

При попытке сделать ссылку на .so
Я использую команду.

clang++ Main.cpp -o foo -L./ -lchaiscript_stdlib-5.3.1.so

Что я делаю неправильно?

libchaiscript_stdlib-5.3.1.so находится в том же каталоге, что и Main.cpp. Я думал, что -L./ добавит .so к путям поиска в библиотеке.

9

Решение

Да -L опция добавляет путь поиска, но компоновщик добавляет .so (или же .a) сам суффикс (так же, как он добавляет lib префикс). Так что вам нужно только иметь -lchaiscript_stdlib-5.3.1 и компоновщик найдет его.

Вы также можете пропустить добавление пути и связать напрямую с файлом:

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so

Обратите внимание, что компоновщик времени выполнения (то есть то, что фактически загружает общие библиотеки при запуске вашей программы), возможно, не сможет найти библиотеку, если она не находится в пути компоновщиков времени выполнения. Вы можете указать компоновщику (время компиляции) добавить путь к пути совместно используемой библиотеки в сгенерированной программе:

clang++ Main.cpp -o foo libchaiscript_stdlib-5.3.1.so -Wl,-rpath,/absolute/path

-Wl option указывает внешнему интерфейсу компилятора передавать параметр компоновщику, а параметр linker -rpath добавляет путь к пути поиска компоновщика во время выполнения.

19

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector