繁体   English   中英

从Ubuntu运行可执行文件到Debian

[英]Run an executable from Ubuntu to Debian

我有一个C ++项目,但我的数据对我的电脑来说太大了。 所以,我试图在我们实验室的桌面上构建我的项目,但编译器太旧了(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++

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

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

你的机器是32位英特尔,所以你的二进制文件是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 (因为传统上 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字节的RAM和一些x86-64处理器(这些日子很常见 ,除了上网本),安装一个64位的Linux版本绝对是值得的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM