#c #c
#c #c
Вопрос:
Я компилирую программу для исходного кода, и она не находит некоторые динамические библиотеки, которые скомпилированы с ней. Вот результат, когда я запускаю исполняемый файл. (Он отлично компилируется)
dyld: Library not loaded: libipeqtcanvas.so.7.0.14
Referenced from: /Users/zrbecker/testipe/bin/./ipe
Reason: image not found
Trace/BPT trap
Мой вопрос в том, я знаю -L находит библиотеки во время компиляции, но как мне убедиться, что программа может находить библиотеки при запуске.
Библиотеки расположены по относительному пути ../lib из исполняемого файла, который находится в каталоге bin.
Комментарии:
1. В процессе компиляции создается исполняемый файл, содержащий всю информацию о библиотеках. Это то, что он получает во время самой компиляции. Итак, если бы вы создали исполняемый файл на компьютере, на котором были библиотеки по указанному вами пути, все должно было работать просто отлично. Однако взятие этого двоичного файла и запуск его в другом месте (где библиотеки недоступны) может быть проблемой.
2. C или C ? Выберите одну. На самом деле звучит так, будто ни то, ни другое не имеет к этому никакого отношения.
Ответ №1:
Вы можете настроить LD_LIBRARY_PATH
(или фактически, DYLD_LIBRARY_PATH
, поскольку вы используете OS X) во время выполнения включение каталога библиотеки.
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/path/to/lib"
Комментарии:
1. Потрясающе, это работает, но есть ли способ справиться с этим во время компиляции?
2. Просто дополнение. Я пытаюсь упаковать все внутри пакета приложений, поэтому библиотеки будут находиться внутри пакета и, возможно, перемещаться.
3. Я думаю, вы можете включить
@executable_path
в path для ссылки на путь к исполняемому файлу во время выполнения.