从Ubuntu运行一个可执行文件到Debian

我在C ++有一个项目,但我的数据太大 ,我的电脑。 所以,我试着在我们的实验室的桌面上构build我的项目,但是编译器太旧了(4.3.5,而且当我开发我的代码时,我的版本是4.8.1)。

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

所以我希望能以某种方式将我在Ubuntu中创build的可执行文件复制到Debian的桌面上并运行它。 但恐怕我要求太多,否定的答案也是可以接受的。

我的电脑(在其中创build可执行文件):

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++

在实验室电脑中什么都不打印,这意味着游戏结束了?

我们不知道你在编程什么样的程序,所以这只是一个疯狂的猜测。

你的机器是一个32位的英特尔,所以你的二进制文件是一个ia32(即x86 32位)二进制文件。 所以你将永远受地址空间的限制(实际上最多2.5到3Gbytes的数据)。

Yoru实验室的机器是运行旧版Linux的64位英特尔

你可以试着在你的机器上编译静态链接(所以g++ -static都在编译时和链接时间,即make -f Makefile_sam_par clean然后make -f Makefile_sam_par CXX='g++ -static'

顺便说一句,你的Makefile_sam_par是错误的,你应该使用CXX而不是内部的CC (因为传统的 CXXCXXFLAGS是C ++的,运行make -p来获取内置的make规则来理解细节,并阅读GNU make的文档 )。 所以先纠正一下。 看到这个例子 。

如果您准备好花费数天时间,并且如果在实验室的桌面上有大量磁盘空间(例如15 GB),则可以尝试编译最近的binutils和最近的GCC 4.9编译器(请确保.. .. ../configure --prefix=$HOME/soft --program-suffix=-my-4.9 ); 这可能是不值得的。

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

顺便说一句,如果你的笔记本电脑有超过4G字节的内存和一些x86-64处理器(现在很普遍 ,除了在上网本上),安装一个64位的Linux变种绝对是值得的。

你还没有说你的电脑是什么样的物理机器。 如果是最新的东西(除了一个非常小的上网本),最好的方法是将内核切换到“amd64”变种,然后使用“-m64”标记在C ++编译器上编译并运行代码,以获得64位可执行文件。

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