Я продолжаю получать
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 к путям поиска в библиотеке.
Да -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
добавляет путь к пути поиска компоновщика во время выполнения.