встраивание абсолютного пути для разделяемых библиотек - PullRequest
3 голосов
/ 14 июля 2009

Используя предоставленную поставщиком кросс-компиляцию инструментария (очевидно, производного от 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 - нет. Кроме того, обратите внимание, что внедренное имя отличается от того, которое я указал в командной строке. Я хотел бы знать, почему (кто вмешивается в мои пути), и как это решить.

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

Ответы [ 3 ]

1 голос
/ 02 августа 2009

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

0 голосов
/ 10 ноября 2009

Это старый вопрос, но я все равно решил добавить возможный ответ.

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

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

0 голосов
/ 27 июля 2009

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, и поэтому я хочу, чтобы везде были абсолютные пути.

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

сделать чистым; LDFLAGS = -L / package / host / myvendor.com / arm9-linux-toolchain-2.1 / префикс / 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 -unnown-linux-gnu - нож для отсоединения акселя - нож для отсоединения бабки - отключение-журнал регистрации - тест на отключение оси && make

сделать чистым; 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 / префикс / bin / arm-linux-gcc LDFLAGS = " -L / package / host / myvendor.com / arm9-linux-toolchain-2.1 / префикс / 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

Какие-нибудь советы по автозагрузке для встраивания --prefix в скомпилированные библиотеки?

...