我在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
(因为传统的 CXX
和CXXFLAGS
是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位程序。