Программа на C++ неправильно ссылается на файл.so

Я построил GLEW (используя make install) для использования в небольшой тестовой программе, которую я пишу (источник может быть найден здесь, если вам это нужно). Я побежал locate libGLEW.so просто чтобы проверить, правильно ли установлены библиотеки GLEW, и получил следующий вывод:

/usr/lib64/libGLEW.so
/usr/lib64/libGLEW.so.2.0
/usr/lib64/libGLEW.so.2.0.0

Это было совершенно нормально. Затем я скомпилировал его с помощью команды:

g++ main.cpp -o main -lglfw -lGLEW -lGL -lX11 -lpthread -lXi -g

Это также вырвало без ошибок. Тем не менее, когда я попытался выполнить программу:

./main: error while loading shared libraries: libGLEW.so.2.0: cannot open shared object file: No such file or directory

Просто для проверки работоспособности я побежал ldd main | grep "GLEW"и конечно же:

libGLEW.so.2.0 => not found

Сначала я думал, что это может быть проблема с компоновщиком, который не ищет каталог, содержащий библиотеки. Итак, я запустил команду ld --verbose | grep "/usr/lib64" и был SEARCH_DIR, содержащий требуемый каталог:

...  SEARCH_DIR("=/usr/lib64"); ...

Это было особенно странно. Я попытался скомпилировать с -L/usr/lib64 вариант, но то же сообщение об ошибке все еще сохраняется. Я проверил, что символические ссылки на библиотеку были правильными, и они были:

lrwxrwxrwx  1 root root   16 Jul 15 10:22 libGLEW.so -> libGLEW.so.2.0.0
lrwxrwxrwx  1 root root   16 Jul 15 10:38 libGLEW.so.2.0 -> libGLEW.so.2.0.0
-rw-r--r--  1 root root 707K Jul 15 10:22 libGLEW.so.2.0.0

Я не уверен, что именно является причиной проблемы, но я начинаю верить, что неправильно установил библиотеки. Я чувствую, что ответ прямо перед моими глазами, но я не могу его найти.

Заранее благодарю за любую помощь.

2 ответа

Решение

Компилировать с -Wl,-rpath=/usr/lib64

Debian и Ubuntu не устанавливают системные библиотеки в /usr/lib64и инструкции по установке, которые вы использовали, не подходят для этих систем. (Не стоит устанавливать библиотеки в обход системы упаковки /usr тем не мение.) /usr/local/lib поиск по умолчанию (в отличие от других систем), так что вы можете переместить библиотеки в этот каталог.

Другие вопросы по тегам