У меня проблемы с LD_LIBRARY_PATH
на ссылке (этот вопрос не имеет никакого отношения к времени выполнения).
Линия ссылок выглядит так, когда я запускаю make (это Linux-система с использованием g++ версии 4.1.x):
g++ a.o b.o c.o -o myapp \
-L/long/path/to/libs/ \
-L/another/long/path/ \
-labc -ldef -lghi
Опции -l
ссылаются на общие библиотеки (например, libabc.so), которые существуют в каталогах, указанных параметрами -l
. Эти каталоги также отображаются в LD_LIBRARY_PATH
. С этой конфигурацией ссылка удалась, и я могу запустить приложение.
Если я удалю каталоги из LD_LIBRARY_PATH
, тогда я получу одну строку ошибки, например:
/usr/bin/ld: cannot find -labc
С другой стороны, если я удалю каталоги из списка опций -l
, тогда я получаю много предупреждений, таких как:
/usr/bin/ld: warning: libabc.so, needed by /long/path/to/libs/libxyz.so,
not found (try using -rpath or -rpath-link)
а затем еще много ошибок, например:
/long/path/to/libs/libdef.so: undefined reference to `Foo::Bar<Baz>::junk(Fred*)'
Может кто-нибудь объяснить разницу между LD_LIBRARY_PATH
и -l
? Я хотел бы понять этот материал в глубину, поэтому ссылки очень ценятся!
Кроме того, что мне нужно добавить к линии ссылок, чтобы избежать использования LD_LIBRARY_PATH
?
EDIT: Когда каталоги отсутствовали в -l
, компилятор предложил "попробовать использовать -rpath или -rpath-link". Я не думаю, что раньше я видел эти параметры в make файле. У вас есть? Не уверен, что это поможет решить проблему LD_LIBRARY_PATH
.