运行 从 Ubuntu 到 Debian 的可执行文件

Run an executable from Ubuntu to Debian

我有一个 C++ 项目,但我的数据只是 我的计算机。因此,我尝试在我们实验室的桌面上构建我的项目,但编译器太旧(4.3.5,而我开发代码时使用的是 4.8.1)。

我没有升级的权利,有权利的人这段时间对我来说太忙了。此外,他们对我说实验室桌面 运行s 上的 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 位 Intel,因此您的二进制文件是 ia32(即 x86 32 位)二进制文件。因此,您将始终受到地址 space 的限制(实际上最多 2.5 到 3GB 的数据)。

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

您可以尝试在您的机器上通过 link 静态编译(因此 g++ -static 在编译和 link 时,即 make -f Makefile_sam_par clean 然后 make -f Makefile_sam_par CXX='g++ -static')

顺便说一句,你的 Makefile_sam_par 是错误的,你应该在其中使用 CXX 而不是 CC (因为 通常 CXXCXXFLAGS 用于 C++,运行 make -p 获取内部规则 make 以了解详细信息,并阅读 documentation of GNU make), . So correct that first. See this example.

如果您准备好花几天时间工作,并且实验室桌面上有大量可用磁盘 space(例如 15 GB),您可以尝试编译最近的 binutils 和最近的GCC 4.9编译器(一定要....../configure --prefix=$HOME/soft --program-suffix=-my-4.9);这可能不值得付出努力。

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

顺便说一句,如果您的笔记本电脑有超过 4GB 的 RAM 和一些 x86-64 处理器(这些天非常普遍,上网本除外),绝对值得安装Linux.

的 64 位变体

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

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