我用C在linux上编写了一些程序,我想在许多远程计算机上运行这些程序,这些计算机都是用fedora或ubuntu安装的。
我和gcc一起在本地机器上编译了程序,但是这个可执行的文件在远程机器上是行不通的。
例如:我使用
gcc -o udp_server udp_server.c在本地机器上,要获取可执行的二进制文件udp_server,然后将其复制到远程计算机并在那里运行,错误是:
-bash:./udp_server: /lib64 64/ld-linux-x86-64.so.2:错误的ELF解释器:没有这样的文件或目录
本地机器: fedora Fedora发布16 (Verne)内核\r上\m (\l) 3.6.10-2.fc16.x86_64 GNU/Linux
远程机器: Fedora版本12 (君士坦丁)内核\r在\m (\l) 2.6.32-36.onelab.x86_64 GNU/Linux上
在这些远程机器上,没有gcc编译器,所以我希望我能制作一些可执行的文件,以便在这些远程机器上执行。
那么,我应该制作什么样的可执行文件,以及如何制作它们呢?是否有重新推荐的工具或程序?谢谢!
发布于 2013-03-08 12:50:32
要运行用C编写的程序,必须首先使用编译来生成可执行文件。在Linux上,C编译器通常是"Gnu C编译器“或gcc。
如果您在Linux上编译了一个C程序,它通常应该在任何其他Linux计算机上运行。然而,必须满足几个条件才能使其发挥作用:
至于如何编译:对于一个简单的程序,您可以直接调用gcc。对于更复杂的程序,一些构建工具是可取的。有很多可供选择的地方;两种流行的选择是GNU make (传统解决方案)和CMake。
要分发该程序:如果它只是一个可执行文件,您只需复制这个可执行文件即可。如果程序由多个文件(图像、数据文件等)组成,则应将其打包为软件包。这允许用户使用包管理器 (如RPM或dpkg )来安装它。如何做到这一点将在不同Linux发行版的各种打包指南中解释。
最后,有一条建议:您似乎对软件开发(尤其是C开发)知之甚少。考虑用C语言阅读一些关于编程的教程--这将回答这些(和许多其他的)问题。有无数的书籍和在线教程-我可以推荐“C书”,由gbdirect。
发布于 2013-03-08 17:47:43
您看到的问题是目标机器上缺少一个动态库。要查看您需要哪些库,您需要使用"ldd“程序。示例(我只是针对每个linux发行版中的标准程序"test“执行它):
$ ldd /usr/bin/test
linux-vdso.so.1 => (0x00007fff5fdfe000)
libc.so.6 => /lib64/libc.so.6 (0x00000032d0600000)
/lib64/ld-linux-x86-64.so.2 (0x00000032cfe00000)在Fedora和RHEL上,您可以使用以下命令找到要安装的RPM包
$ rpm -q --whatprovides /lib64/ld-linux-x86-64.so.2
glibc-2.16-28.fc18.x86_64然后你需要安装它:
$ yum -y install glibc-2.16-28.fc18.x86_64我不使用Ubuntu / Debian,不知道如何做到这一点。请注意,在32位系统上,64位的库是不可缺少的,但是在64位系统上,这些库通常有一个i686标记,并且是可安装的。
发布于 2013-03-08 12:52:33
通常,只要保持体系结构,就可以在不同的机器上执行程序。例如,您不能在32位机器上执行64位程序,反之亦然(您可以通过安装32位库来解决这个问题,但这可能太困难了)。
如果您有不同的发行版,或者同一个linux发行版的不同版本,这可能是个问题--您需要确保在相同的主要版本中有所有的依赖项。
或者您可以静态地链接库,这在linux世界中是不常见的,但是您可以这样做。学习如何使用GCC,然后你会发现如何做到这一点。
https://stackoverflow.com/questions/15294230
复制相似问题