我有一个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++
在实验室计算机上什么都不打印,这意味着游戏结束了?
答案 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位程序。