Прежде всего, на Linux qmake создает Make-файлы, которые используются для управления процессом сборки. При добавлении линии
LIBS+=-L"$$_PRO_FILE_PWD_/libs" -lvl
в файл .pro
, QMAKE будет следить за тем, что соответствующая целевая Makefile генерируется повествующий компоновщик для поиска дополнительных библиотек в $$_PRO_FILE_PWD_/libs
и ссылку на библиотеку libvl.so
когда связывая с исполняемый файл.
Однако то, что вы испытываете, является проблемой . Более конкретно, ld-linux.so.2
попытается найти и динамически загружать общие библиотеки, например libvl.so
, по адресу runtime. Это происходит при использовании встроенного, например, /usr/lib
и определенных пользователем (и/или распределенных) путей при загрузке исполняемого файла. Я отсылаю вас к соответствующему man page для ld-linux.so.2
и man page для ldconfig
, который используется для настройки пользовательских путей поиска библиотеки стандартным способом.
Когда ld-linux.so.2
пытается найти библиотеки, он ищет хорошо определенный набор каталогов (все разделённые двоеточия) в следующем порядке:
- , если присутствует, так называемый
DT_RPATH
, который может быть записан в исполняемая библиотека (устарела).
LD_LIBRARY_PATH
(по крайней мере, для большинства исполняемых файлов, обратитесь к странице за исключением)
DT_RUNPATH
, который не заменяет DT_RPATH
(если таковые имеются), но задерживает поиск до тех пор, после того, как LD_LIBRARY_PATH
был обработан. RPATH
и RUNPATH
могут использоваться для имитации поведения, например, в Windows, где также просматривается путь исполняемого файла. LD_LIBRARy_PATH
, однако, намного лучше подходит для этой цели.
- имена библиотек, присутствующих в кэш-файле
/etc/ld.so.cache
который генерируется ldconfig
с использованием каталогов, указанных в /etc/ld.so.conf/
и, возможно, дополнительных файлов, либо непосредственно упоминается путем включения в ld.so.conf
или не указано иное
- в доверенные каталоги,
/lib
и /usr/lib
Если ни один из указанных выше путей не содержит соответствующего общего объекта, вы получите сообщение об ошибке, которое не может быть загружено ld-linux.so.2
.
Решение в вашем случае просто и прийти в некотором многообразии:
- перед выполнением программы, установите переменные окружения
LD_LIBRARY_PATH
с помощью export LD_LIBRARY_PATH={yourSearchPaths}
.
- добавьте
LD_LIBRARY_PATH
к вызову исполняемого файла в командной строке, например. LD_LIBRARY_PATH={yourSearchPaths} ./{executable}
- предоставляют исполняемый сценарий запускающего сценария запуска, например.
start.sh
, который делает это для вас, а затем просто выполняет shell-скрипт ./start.sh
В чем проблема? Разве компилятор не находит библиотеки? Если 'lvl' является lib, вам нужно добавить префикс' -l', чтобы фактически добавить его в список libs для ссылки. – thokra
Эта ошибка: Ошибка при загрузке разделяемых библиотек: libvl.so: невозможно открыть файл общих объектов: Нет такого файла или каталога – triple13
@thokra да, у меня уже есть его как -lvl в моей программе, но когда я сделал копию вставки в forum the - was gone: D – triple13