1

我愿意编译一个需要 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 支持呢?

干杯

4

2 回答 2

1

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

  1. 获取更新的交叉编译工具链,支持您需要的新语言/库功能(可能自己从源代码构建)
  2. 重写应用程序,使其不需要 C++0x 功能。
于 2013-01-11T13:57:57.607 回答
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

有任何问题,请随时发表评论或打开问题。

于 2019-05-05T15:45:38.237 回答