Gcc -/usr/bin/ld error: не удается найти <library> в /usr/local/lib, хотя ldconfig перечислит его, а путь добавлен в ld.so.conf

Я пытаюсь скомпилировать код на С++, используя библиотеку, которую я также скомпилировал вручную и установил в /usr/local/lib

Компиляция программного обеспечения выходит из строя на этапе связывания:

 /usr/bin/ld: error: cannot find -lcppdb

кажется, что g++ не ищет по умолчанию в /usr/local/lib, то же самое для clang++

 g++ -print-search-dirs # does not show /usr/local/lib

однако факт /usr/local/lib находится в моем /etc/ld.so.conf, и я выполнил ldconfig как root, и на самом деле работает ldconfig -p | grep cppdb показывает мне

libcppdb_sqlite3.so.0 (libc6) => /usr/local/lib/libcppdb_sqlite3.so.0
libcppdb_sqlite3.so (libc6) => /usr/local/lib/libcppdb_sqlite3.so
libcppdb.so.0 (libc6) => /usr/local/lib/libcppdb.so.0
libcppdb.so (libc6) => /usr/local/lib/libcppdb.so

добавление опции -L/usr/local/lib, конечно, решает проблему, но цель состоит в использовании конфигурационных файлов

Ответ 1

ld, компоновщик, для этого не использует внешние файлы конфигурации. ldconfig для загрузчика ld.so. Создайте файл makefile, если вы хотите где-то установить значения для компоновщика.

Ответ 2

Задание -L переключателей в вашем файле makefile является распространенным способом решения этой проблемы, но вы действительно можете сделать общесистемные изменения, изменив GCC по умолчанию spec file, который может использоваться для указания дополнительных параметров, которые должны быть переданы компилятору, компоновщику и т.д. Я делал это в прошлом, чтобы решить вашу конкретную проблему, но это было давно, поэтому я не может дать вам конкретный пример, к сожалению.

Ответ 3

  1. Вы можете использовать скрипт компоновщика и добавить '/usr/local/lib' в search_dir. см. этот Linker_Scripts, чтобы получить больше деталей.

  2. добавьте /usr/local/lib в среду оболочки GCC_EXEC_PREFIX и попробуйте снова. более детальный поиск print-search-dirs в "man" of g++.

просто предложение, оно еще не пробовал.