从Ubuntu运行可执行文件到Debian

时间:2015-04-03 19:45:44

标签: c++ linux ubuntu debian cross-compiling

我有一个C ++项目,但我的数据仅为too big我的计算机。所以,我尝试在我们实验室的桌面上构建我的项目,但是编译器太旧了(4.3.5,当我开发代码时我有4.8.1。)

我没有升级的权利,拥有这些权利的人在这段时间对我来说太忙了。此外,他们告诉我实验室桌面运行的Debian版本太旧了,因此不允许对编译器进行重大升级。

所以我希望以某种方式我可以设法将我在Ubuntu中创建的可执行文件复制到Debian并运行它。但我担心我要求太多,所以否定答案也是可以接受的。

我的电脑(创建可执行文件):

samaras@samaras-A15:~$ uname -a
Linux samaras-A15 3.8.0-29-generic #42~precise1-Ubuntu SMP Wed Aug 14 15:31:16 UTC 2013 i686 i686 i386 GNU/Linux
samaras@samaras-A15:~$ lsb_release -d
Description:    Ubuntu 12.04.3 LTS

实验室计算机以及运行可执行文件时会发生什么:

gsamaras@geomcomp:~/Desktop/code$ uname -a
Linux geomcomp 3.2.0-1-amd64 #1 SMP Fri Feb 17 05:17:36 UTC 2012 x86_64 GNU/Linux
gsamaras@geomcomp:~/Desktop/code$ lsb_release -d
Description:    Debian GNU/Linux 6.0.10 (squeeze)
gsamaras@geomcomp:~/Desktop/code$ ./rkd_sam
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by ./rkd_sam)
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.17' not found (required by ./rkd_sam)
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./rkd_sam)

我有希望,因为它们都是Linux系统,但32位和64位可能是一个问题...:/


使用-static标志,我得到的错误更少,但仍然是..

gsamaras@geomcomp:~/Desktop/code$ ./rkd_sam
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by ./rkd_sam)
./rkd_sam: /usr/lib32/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./rkd_sam)

依赖项是(这在我的电脑上):

samaras@samaras-A15:~/parallel/rkd_forest/code$ ldd rkd_sam
    linux-gate.so.1 =>  (0xb76f8000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb75e9000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb75bd000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb759e000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb73f4000)
    /lib/ld-linux.so.2 (0xb76f9000)

我正在

which libstdc++

在实验室计算机上什么都不打印,这意味着游戏结束了?

2 个答案:

答案 0 :(得分:2)

我们不知道您编写的是哪种程序,所以这只是一个疯狂的猜测。

你的机器是32位Intel,所以你的二进制文件是ia32(即x86 32位)二进制文件。因此,您将始终受到地址空间的限制(实际上最多2.5到3G字节的数据)。

Yoru lab的机器是运行旧版Linux的64位intel

您可以尝试通过静态链接在您的计算机上进行编译(在编译和链接时都是g++ -static,即make -f Makefile_sam_par clean然后make -f Makefile_sam_par CXX='g++ -static'

顺便说一句,你的Makefile_sam_par错了,你应该在其中使用CXX而不是CC(因为传统 CXX和{{1}对于C ++,运行CXXFLAGS以获取make -p中的内置规则以了解详细信息,并阅读documentation of GNU make),.所以先纠正。请参阅this example

如果您准备好花几天时间工作,并且实验室桌面上有大量磁盘空间(例如15 GB),您可能会尝试编译最近的binutils和最近的{{{ 3}} 4.9编译器(一定要...... make);这可能不值得努力。

也许试着问一些朋友(拥有比你更大的笔记本电脑,使用Linux 64位和超过4Gb的RAM)来运行你的程序。

顺便说一句,如果你的笔记本电脑有超过4G字节的RAM和一些x86-64处理器(这些日子非常普通,除了上网本),安装一个64位的变体绝对是值得的Linux操作系统。

答案 1 :(得分:1)

你还没有说过你的PC是什么样的物理机器。如果它是最新的(除了一个非常小的上网本),你最好的选择可能是将你的内核切换到'amd64'变体,然后在你的机器上使用'-m64'标志编译并运行代码到C ++编译器得到64位可执行文件。

这台我正在打字的机器有这样的设置,32位用户空间,64位内核和一些64位程序。