synology cross compile gcc -std = c ++ 0x

时间:2013-01-11 13:41:21

标签: c++ gcc

我愿意编译一个需要-std = c ++ 0x选项的程序,以使其执行Synology x86 NAS系统(Intel Atom)。我正在使用交叉编译工具链(synoroot目录)。

$cat tst.cpp
tst.cpp:
    int main() {
    return 0;
}

$ gcc --version
gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2

$gcc tst.cpp -std=c++0x --sysroot=/usr/local/synoroot -nodefaultlibs /usr/local/synoroot/lib/libc.so /usr/local/synoroot/lib/ld-linux.so.2 /usr/local/synoroot/usr/lib/libstdc++.so /usr/local/synoroot/lib/libm.so -o tst

$./tst && echo $?
0

关于synology:

$./tst
Floating point exception (core dumped)

如果我使用工具链gcc(i686-linux-gnu-gcc(GCC)4.2.1),。/ tst在synology上正确执行,但不支持-std = c ++ 0x。

那么我怎样才能成功执行并支持C ++ 0x?

干杯

2 个答案:

答案 0 :(得分:1)

如果你的目标系统(Synology)与你的主机系统(Ubuntu)有很大不同需要交叉编译器,那么你只有两个选择:

  1. 获取更新的交叉编译工具链,支持您需要的新语言/库功能(可能是您自己构建的)
  2. 重写应用程序,使其不需要C ++ 0x功能。

答案 1 :(得分:0)

如果您只想运行或编译并在Synology上运行,则可以选择Debian Chroot您的DSM。这样,您就可以在Synology上进行任何您想做的事情。

这是我的DSM6.x存储库的Debian-Chroot.pkg,您可以安装它。 https://github.com/OKit-Scripts-Projects/DSM.Customizations/blob/master/App.Debian-Chroot.md

任何问题,请随时发表评论或提出问题。