Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 嵌入共享库的绝对路径_C_Cross Compiling_Gnu Toolchain - Fatal编程技术网

C 嵌入共享库的绝对路径

C 嵌入共享库的绝对路径,c,cross-compiling,gnu-toolchain,C,Cross Compiling,Gnu Toolchain,使用供应商提供的交叉编译工具链(显然是一个开放嵌入的衍生工具),我无法嵌入到第三方(开源、内部编译)库的绝对路径。使用以下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

使用供应商提供的交叉编译工具链(显然是一个开放嵌入的衍生工具),我无法嵌入到第三方(开源、内部编译)库的绝对路径。使用以下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,这不是我想要的答案

arm linux gcc-打印文件名没有显示任何令人惊讶的内容:


armlinux 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 armlinux 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 armlinux 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-打印文件名=/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/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--主机=armv4tl未知linux gnu--禁用axl刀--禁用axl刀--禁用axl日志--禁用axl测试和生成

保持清洁;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/myvendoor.com/arm9-linux-toolchain-2.1/prefix/bin/arm-linux-gcc-LDFLAGS=“-L/package/package/host/myvendoll/arm9-linux-toolchain-2.1/linux-lib/prefix”~/wd/sources/contrib/vortex/configure--prefix=/shared/syst/arm9 linux abtrack/package/host/aspl.es/vorte-1.1.0--禁用http支持--禁用拉式支持--禁用隧道支持--禁用xml rpc支持--禁用sasl支持--禁用Vorte日志--禁用Vorte客户端--主机=armv4tl未知linux gnu&&制造


在编译库中嵌入--prefix有什么autofoo提示吗?

我猜供应商提供的libs会将SONAME设置为完整安装路径。

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

仅根据您提供的信息,是否因为您指定的aspl库是软链接,所以aspl不包含完整路径名?例如,如果您在/package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.0上列出一个长列表,那么它将显示指向libvortex-1.1.so.0的链接(没有完整路径名)


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

gcc编译器是否具有-print file name标志?试试这个:armgcclinux-printfilename=/package/host/aspl.es/vortex-1.1.0/lib/libvortex-1.1.so顺便问一下,程序运行成功了吗?(DT_RPATH中有/package/host/myvendor.com?)我无法告诉您为什么会发生这种情况,但您确实不应该像那样指定libs的绝对路径。使用-L/package/host/myvendor.com/API-R-2.0.0/Release/Libraries/-lbgprs\u stuff和类似命令。有一些选项(“
-v
”IIRC)可以查看传递给
gcc
调用的组件程序的确切命令行。尝试使用它,看看您是否能够发现“myvendor”和“aspl”库传递到“
ld
”的方式(或周围的选项)上的差异。必须告诉加载程序以不同的方式对待这两组库。LDFLAGS=/path configure是错误的。您应该改为配置LDFLAGS=/path。也就是说,将设置作为参数提供给configure脚本,而不是在configure环境中进行设置。这允许config.status正确维护设置。这可能是您遇到的问题的一部分。