嵌入共享库的绝对路径

时间:2009-07-14 11:30:24

标签: c cross-compiling gnu-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则没有。另外,请注意嵌入的名称与我在命令行中指定的名称不同。我想知道为什么(谁在弄乱我的路径),以及如何解决它。

p.s。:我知道RPATH,这不是我正在寻找的答案

3 个答案:

答案 0 :(得分:1)

我的猜测是供应商提供的库将SONAME设置为完整的安装路径。

答案 1 :(得分:0)

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正确设置,因此我想要到处都是绝对路径。

请注意,建议可能会指向第三方库的编译,这些库目前已编译为:

make 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&&使

在编译库中嵌入--prefix的任何autofoo提示?

答案 2 :(得分:0)

这是一个老问题,但我想我还是会添加一个可能的答案。

根据您提供的信息,可能是aspl不包含完整路径名,因为您指定的aspl库是软链接吗?如果你做了一个很长的列表,例如/package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.so它会显示它是libvortex-1.1.so.0的链接(带有没有完整的路径名。)

因此,如果您仍希望嵌入完整路径,则需要使用实际库的完整路径,而不是链接库。