有没有x86到x86的gcc交叉编译器?

一般来说,如果不依赖什么特殊的库,基本上不需要特别处理。

glibc和libstdc++都只能向后兼容,不能向前兼容.要想二进制兼容老系统,就必须在老系统上编译.

llvm有自己的binutils, 除了汇编器别的都有,而且都兼容GNU ( 其实也兼容Apple和MSVC ) 我在Gentoo上1200个包基本上都是全套llvm工具链编译的. 我有两个Gentoo系统,一个是全套llvm工具链+musl libc + libc++, 卸载了gcc和GNU binutils (除了gas), 另一个是glibc + libc++ + 全套llvm工具链, 留着gcc和GNU binutils只为了编译glibc这种clang编译不了的库.

CC="clang"
CXX="clang++"
CPP="clang-cpp"
AR="llvm-ar"
NM="llvm-nm"
OBJCOPY="llvm-objcopy"
OBJDUMP="llvm-objdump"
RANLIB="llvm-ranlib"
SIZE="llvm-size"
STRIP="llvm-strip"
LDFLAGS="-fuse-ld=lld"

交叉编译主要是链接路径比较麻烦. 我用crosstool-ng编译好了基本的交叉编译工具, 然后把目标系统里的一些常用库拷贝过来, 比如openssl的库, 然后遇到了动态库依赖其他动态库的问题.

链接的时候, 拷贝过来的动态库默认会在/lib64下面搜索其依赖的动态库, 然后我用-rpath-link让它在指定目录搜索, 这样一来它好像就不自动链接c库了, 链接时候报以下错误:

x86_64-unknown-linux-gnu-ld: ../common/io_poller.o: undefined reference to symbol 'epoll_create@@GLIBC_2.3.2'
/home/data/cross/centos7/bin/../x86_64-unknown-linux-gnu/sysroot/lib64/libc.so.6: error adding symbols: DSO missing from command line

然后我加了参数-lc, 上面错误没了, 又报了其他错误:

x86_64-unknown-linux-gnu-ld: app_cfg.o: undefined reference to symbol '_ZNKSs5c_strEv@@GLIBCXX_3.4'
/home/data/cross/centos7/bin/../x86_64-unknown-linux-gnu/sysroot/lib64/libstdc++.so.6: error adding symbols: DSO missing from command line

加了-lstdc++参数, 上面错误没了, 然后又报错, 提示math库里的符号找不到, 无穷无尽啊.

-rpath-link这个参数怎么会把c/c++基本库都忽略了? 难以理解, 有没有大神指导一下?

所以你没有-lm