从Ubuntu到Debian运行一个可执行文件
Run an executable from Ubuntu to Debian
我有一个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
(因为传统上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)来运行你的程序。
顺便说一句,如果你的笔记本电脑有超过4GB的RAM和一些x86-64处理器(这是现在非常常见的,除了上网本),那么安装64位版本的Linux肯定是值得的。
你还没有说你的电脑是什么样的物理机器。如果它是最新的(除了一台非常小的上网本),你最好的选择可能是将内核切换到"amd64"变体,然后在你的机器上使用C++编译器的"-m64"标志编译并运行代码,以获得64位可执行文件。
我正在打字的这台机器有这样的设置,32位用户空间,64位内核和一些64位程序。
- 程序在使用 system() 启动另一个可执行文件时停止
- 只有一个可执行文件即可进行跨平台 SIMD 调用?
- 构建一个可执行文件,如果是单个 cpp 文件
- C++将各种资源文件链接到一个可执行文件中
- 如何在 ubuntu 上将可执行文件注入另一个可执行文件
- 'Continuous' C++一个可执行文件的输出作为另一个程序的输入
- 程序如何创建另一个可执行文件
- 用cpp、python和csv文件制作一个可执行文件
- 从Ubuntu到Debian运行一个可执行文件
- 当文件相互依赖时,如何使用g++将多个cpp文件编译为一个可执行文件
- 执行一个新的完全独立的进程,该进程封装在一个可执行文件中,而不需要为独立进程将文件写入磁盘
- 我可以将一个可执行文件与另一个可执行文件(Windows 服务程序)组合在一起,并将该程序作为逻辑服务运行吗?
- 在Linux上,从C++调用一个可执行文件,然后等待它完成
- 将所有.cpp文件编译为一个可执行文件
- 如何将多个gsoap客户端web服务编译成一个可执行文件
- 如何在CMake中更改一个可执行文件的编译器标志
- 创建一个调用另一个可执行文件的可执行文件
- 如何在调试模式和发布模式下链接一个动态库和一个可执行文件
- C++,Visual Studio:有可能创建一个可执行文件来设置环境变量,然后执行吗
- Turbo C++系统函数运行一个可执行文件