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