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

Run an executable from Ubuntu to Debian

本文关键字:一个 可执行文件 Ubuntu Debian 运行      更新时间:2023-10-16

我有一个C++项目,但我的数据对我的计算机来说太大了。因此,我试图在实验室的桌面上构建我的项目,但编译器太旧了(当我开发代码时,我有4.3.5和4.8.1)。

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

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

我的计算机(在其中创建可执行文件):

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到3字节的数据)。

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)来运行你的程序。

顺便说一句,如果你的笔记本电脑有超过4GB的RAM和一些x86-64处理器(这是现在非常常见的,除了上网本),那么安装64位版本的Linux肯定是值得的。

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

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