У меня проблемы с 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.