当我试图测试编译一个非常简单的程序时,我遇到了这个错误:
#ifdef __cplusplus
extern "C"
#endif
int
main ()
{
return 0;
}如果我使用g++编译,我会得到以下错误消息:
g++ -o conftest -I/opt/include -L/opt/lib -Wl,--library-path=opt/lib testconftest.cpp
/opt/bin/ld: skipping incompatible /lib/libm.so.6 when searching for /lib/libm.so.6
/opt/bin/ld: cannot find /lib/libm.so.6
/opt/bin/ld: cannot find /lib/libmvec.so.1但编译将通过gcc:
gcc -o conftest -I/opt/include -L/opt/lib -Wl,--library-path=opt/lib testconftest.cpp注意,该系统是32位和64位的混合体,所有32位程序和库都是/lib、/bin、/sbin等。所有64位程序和库都在/opt/lib、/opt/bin、opt/sbin等。我知道/lib/libm.so.6将是错误的版本,更正后的版本在/opt/lib中。另外,gcc,g++,ld都是64位,都在/opt子文件夹中,并且已经成功地用gcc编译了其他复杂的程序。文件/lib/libm.so.6是指向/lib/libm-2.6.1.so的符号链接;File /opt/lib/lim.so.6是指向/opt/lib/libm-2.22.so*的符号链接。
file /opt/lib/libm-2.22.so
/opt/lib/libm-2.22.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, for GNU/Linux 2.6.32, stripped
file /lib/libm-2.6.1.so
/lib/libm-2.6.1.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.8, stripped
g++ --version
g++ (OpenWrt GCC 4.8.5) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.发布于 2016-03-09 15:33:31
由于我不能重现你所遇到的问题,我只能给你一些提示。
看看这个回答,因为在链接器阶段使用g++会自动添加一些额外的库。您可以在编译/链接时使用-v选项,以便更清楚地了解所包含的libs。
-v打印(在标准错误输出上)运行编译阶段所执行的命令。还打印编译器驱动程序的版本号以及预处理器和编译器的版本号。
当g++ auto将libstdc++添加到链接器阶段时,请查看它在路径中声明的位置。
$ ldconfig -p | grep stdc++
libstdc++.so.6 (libc6,x86-64) => /usr/lib64/libstdc++.so.6
libstdc++.so.6 (libc6) => /usr/lib/libstdc++.so.6https://unix.stackexchange.com/questions/263580
复制相似问题