встраивание абсолютного пути для разделяемых библиотек

Используя поставщика, предоставляющего кросс-компиляцию toolchain (по-видимому, OpenEmbedded производную), я не могу вставить абсолютный путь в сторонние (с открытым исходным кодом, скомпилированные в доме) библиотеки. В следующей командной строке gcc:

arm-linux-gcc test_connect_send.o gprs_connect.o \ /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgprs_stuff.so \ /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libpower_supply_stuff.so \ /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgsm_stuff.so \ /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libtcp_stuff.so \ /package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.so \ /package/host/aspl.es/axl-0.5.6/lib/libaxl.so.0 -o test_connect_send 

objdump говорит:

 Dynamic Section: NEEDED /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgprs_stuff.so NEEDED /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libpower_supply_stuff.so NEEDED /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libgsm_stuff.so NEEDED /package/host/myvendor.com/API-R-2.0.0/Release/Libraries/libtcp_stuff.so NEEDED libvortex-1.1.so.0 NEEDED libaxl.so.0 NEEDED libgcc_s.so.1 NEEDED libc.so.6 

Обратите внимание, что библиотеки моих поставщиков имеют полный путь, а aspl – нет. Также обратите внимание на то, как внедренное имя отличается от имени, указанного в командной строке. Я хотел бы знать, почему (кто возится с моими путями) и как его решить.

ps: Я знаю о RPATH, это не тот ответ, который я ищу

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

arm-linux-gcc -print-file-name не показывает ничего удивительного:

arm-linux-gcc -print-file-name = / package / host / aspl.es / axl-0.5.6 / lib / libaxl.so.0.0.0 /package/host/aspl.es/axl-0.5.6 /lib/libaxl.so.0.0.0 arm-linux-gcc -print-file-name = / package / host / aspl.es / axl-0.5.6 / lib / libaxl.so.0.0 / package / host / aspl .es / axl-0.5.6 / lib / libaxl.so.0.0 arm-linux-gcc -print-file-name = / package / host / aspl.es / axl-0.5.6 / lib / libaxl.so.0 /package/host/aspl.es/axl-0.5.6/lib/libaxl.so.0 arm-linux-gcc -print-file-name = / package / host / aspl.es / axl-0.5.6 / lib /libaxl.so /package/host/aspl.es/axl-0.5.6/lib/libaxl.so

Результирующий двоичный файл не работает без LD_LIBRARY_PATH и не имеет DT_RPATH (хотя это может помочь, предложения?)

Я не хочу полагаться на правильно установленный /etc/ld.so.conf, и поэтому я хочу, чтобы абсолютные пути повсюду.

Обратите внимание, что предложения могут указывать на компиляцию сторонних библиотек, которые в настоящее время скомпилированы с помощью:

сделать distclean; LDFLAGS = -L / package / host / myvendor.com / arm9-linux-toolchain-2.1 / prefix / arm-linux / lib CC = / package / host / myvendor.com / arm9-linux-toolchain-2.1 / prefix / bin / arm-linux-gcc ~ / wd / sources / contrib / axl / configure –prefix = / shared / syst / arm9-linux-abtrack / package / host / aspl.es / axl-0.5.6 -host = armv4tl -unknown-linux-gnu -disable-axl-knife –disable-axl-babel –disable-axl-log –disable-axl-test && make

сделать distclean; AXL_LIBS = “- L / shared / syst / arm9-linux-abtrack / package / host / aspl.es / axl-0.5.6 / lib / -laxl -lm” AXL_CFLAGS = -I / shared / syst / arm9-linux- abtrack / package / host / aspl.es / axl-0.5.6 / include / axl CC = / package / host / myvendor.com / arm9-linux-toolchain-2.1 / prefix / bin / arm-linux-gcc LDFLAGS = ” -L / package / host / myvendor.com / arm9-linux-toolchain-2.1 / prefix / arm-linux / lib “~ / wd / sources / contrib / vortex / configure –prefix = / shared / syst / arm9-linux -abtrack / package / host / aspl.es / vortex-1.1.0 –disable-http-support –disable-pull-support –disable-tunnel-support –disable-xml-rpc-support-gen – disable-xml-rpc-support –disable-sasl-support –disable-vortex-log –disable-vortex-client –host = armv4tl-unknown-linux-gnu && make

Любые подсказки autofoo для встраивания –prefix в скомпилированные библиотеки?

Это старый вопрос, но я думал, что добавлю возможный ответ в любом случае.

Может быть, только исходя из информации, которую вы указали, может быть, что имена полного пути не включены в aspl, потому что указанные вами aspl-библиотеки являются мягкими ссылками? Если вы делаете длинный список, например, /package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.so, он покажет, что это ссылка на libvortex-1.1.so.0 (с no full pathname).

Итак, если вы все еще хотите внедрить полный путь, вам нужно использовать полный путь к фактической библиотеке, а не к связанной библиотеке.