Linker 找不到/lib/libc.so.6

Linker 找不到/lib/libc.so.6,linker,cross-compiling,Linker,Cross Compiling,我正在交叉编译一个应用程序,但是链接失败了,出现了一个错误 “找不到/lib/libc.so.6” 它应该使用的libc.so.6位于/home/work/worldcom/filesys/lib/libc.so.6。我这里出了什么问题 linking libobj.so arm-none-linux-gnueabi-g++ obj1.o obj2.o obj2.o -o libobj.so -L/home/work/worldcom/filesys/usr -Wl,-O1 -Wl,-z,de

我正在交叉编译一个应用程序,但是链接失败了,出现了一个错误

“找不到/lib/libc.so.6”

它应该使用的libc.so.6位于
/home/work/worldcom/filesys/lib/libc.so.6
。我这里出了什么问题

linking libobj.so
arm-none-linux-gnueabi-g++ obj1.o obj2.o obj2.o  -o libobj.so -L/home/work/worldcom/filesys/usr -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L/home/work/worldcom/filesys -L/home/work/worldcom/filesys/lib -L/home/work/worldcom/filesys/usr/lib -lcurl -shared
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status<br />
make: *** [libobj.so] Error 1<br />

当然,LIBOBJ_obj也有一个定义和目标,但这些与问题无关

似乎makefile被破坏了,因为libc.so.6被假定位于/lib/文件夹中(注意前面的斜线表示绝对路径!)。这似乎就是问题所在。

您是否考虑过可能设置了
LIBPATH
并对其进行了硬编码,以查找
/lib/libc.so.6
以及
/lib
路径

在交叉编译时发出
make
之前,您是否尝试在命令行上设置环境变量,如下所示:

LIBPATH=/home/work/worldcom/filesys/lib LIBPATH=/home/work/worldcom/filesys/lib 在您的特定情况下,正如您在标记“交叉编译”中所提到的,删除对
/lib
的任何引用可能是值得的,以完全强制链接器在您自己的主目录中查找,而不是干扰交叉编译过程

另一种可能性是,在为您的环境构建gcc编译器时,从源代码构建编译器期间的配置被指定为指向
/lib
路径

希望这有帮助, 顺致敬意,
Tom.

您没有指出您使用的是什么gcc版本,但是如果它是一个足够新的版本(我认为是4.0.0及以上版本),您应该尝试将
--sysroot
标志添加到g++/ld。将其指向Makefile中定义的$SYSROOT。例如:

--sysroot=$(SYSROOT)

假设最近有足够多的gcc版本,它会起作用。

我刚刚讨论过同样的问题;添加--sysroot=/rootfs/prefix帮助我更接近真正的问题我通过在target中安装libstdc++-dev包修复了它。

当然可以,但是makefile中的哪些内容可能会被破坏?你可以从我粘贴的内容中看到链接的内容,对吗?所有这些——我指的是那些显然不是的地方。太好了。。。我肯定还遗漏了什么。我会补充更多关于我的问题的信息,看看这是否有助于澄清任何问题……好吧,我想我在这里不够清楚……-)。像/foo/bar和foo/bar这样的路径名之间有很大的区别。第一个总是指向/foo/bar/,从文件系统的根目录看,后一个取决于当前的工作目录。因为makefile中的路径似乎是绝对的,即从根目录开始,您的搜索路径甚至没有查找和搜索libc.so。希望有帮助。不是makefile被破坏了,绝对路径包含在链接器脚本中。这不一定是错误的,因为交叉编译链接器应该在sysroot前缀下搜索。。。但它确实会产生非常混乱的错误消息。只是尝试了导出LIBPATH=/home/work/worldcom/filesys/lib,但没有得到任何乐趣。也许您对gcc编译器指向/lib路径的看法是正确的,尽管这看起来很奇怪。我会调查这可能是问题的根源。谢谢,LishaYou应该看看从
gcc-dumpspecs
-它可能有一些关于它在哪里搜索libc的输出。我的英雄!!!:)它实际上是--sysroot,没有“with-”,但是你给我指出了正确的方向,它就工作了。现在我有一个新的错误。新的错误是好的。这意味着我克服了一个问题,并面临着诱发高血压的全新挑战!:)下面是我的Makefile中的新行:$(CXX)$^-o$@$(LDFLAGS)-shared$(PKG_LIBS)--sysroot=$(sysroot)现在,在这个答案发布10.5年后的今天,你也是我的英雄。
--sysroot=$(SYSROOT)