在Fedora 18上为Centos 6.4交叉编译

时间:2013-05-14 12:31:34

标签: c++ c++11 fedora centos6 cross-compiling

我正在使用Fedora 18计算机上的一个Project,它使用C ++ 11标准的类,并希望将它部署在Centos 6.4服务器上。

除了libc和libc ++版本(GLIBC_2.11,GLIBCXX_3.4.15和我的Fedora机器GLIBC_2.14和至少GLIBCXX_3.4.17)之外,我能够解决所有加载器错误。

是否可以告诉编译器编译/链接服务器版本或旧版本的库?

当我运行 ldd可执行文件时,我得到了

./executable: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./executable)
./executable: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./executable)

提前致谢!

1 个答案:

答案 0 :(得分:5)

您可以使用mockepel-6-x86_64配置设置包含CentOS构建环境的chroot,而不是手动将库复制到单独的目录。

在模拟chroot中使用yum来安装你想要的软件包(例如Qt)并在那里构建,这将确保代码只使用安装在chroot中的CentOS 6库,而不是其他的Fedora OS上的软件包。

更新:

当我使用模拟chroot构建GCC时,我这样做:

# only need these steps once to setup the chroot
mock -r fedora-19-x86_64 --init
mock -r fedora-19-x86_64 --install yum
mock -r fedora-19-x86_64 --shell 'mkdir -p /builddir/gcc/src /builddir/gcc/build'
su -c 'mount --bind $PATH_TO_GCC_SOURCES /var/lib/mock/fedora-19-x86_64/root/builddir/gcc/src'
# enter root password
mock -r fedora-19-x86_64 --shell
# now in chroot
yum install gmp-devel mpfr-devel libmpc-devel flex autogen
su - mockbuild
cd gcc/build
../src/configure --prefix=/builddir/gcc/install ... etc. ...

出于您的目的,您将fedora-19替换为epel-6

绑定挂载意味着我不需要在chroot中拥有GCC源,我可以在我的普通文件系统中使用现有的副本。有关构建GCC的信息,请参阅http://gcc.gnu.org/wiki/InstallingGCC

在chroot中安装GCC后,您可以使用它来构建自己的程序,然后将它们打包为CentOS。

稍后再回到chroot:

mock -r fedora-19-x86_64 --shell
su - mockbuild