Ubuntu编译的程序在Unix webserver上运行

时间:2012-03-18 15:07:30

标签: apache gcc ubuntu glibc ada

我使用GNAT在Ubuntu上编译了一个Ada程序。

之后,我尝试了一些使用该程序的测试,并且它运行正常。

但是当我将其上传到我的Apache(UNIX)网络服务器并尝试运行该程序时,没有输出。为什么会这样?

可能是在Ubuntu上编译的程序在UNIX服务器上不起作用吗?

(抱歉这个愚蠢的问题!)

我用于编译的系统的Linux版本(uname -a):

Linux ubuntu 3.0.0-12-generic #20-Ubuntu x86-64 GNU/Linux

系统的Linux版本我想稍后运行该程序(uname -a):

Linux 2.6.37-he-xeon-64gb+1 i686 GNU/Linux

为了在Ubuntu机器上进行编译,我使用:

gnatmake -O3 myprogram -bargs -static

3 个答案:

答案 0 :(得分:7)

构建GNAT程序(gnatmake my_program)时,默认情况下会链接动态库(libgnat.solibgnarl.so)。这些库是GNAT系统的一部分,不太可能在您的Web服务器上使用。

如果你说ldd my_program它将显示使用的共享库。

您可以通过说

强制构建使用静态GNAT库
gnatmake my_program -bargs -static

-bargs -static必须在-O2之类的常规标记之后。

修改:more info on -bargs and friends

答案 1 :(得分:1)

您必须确保服务器具有您的应用链接的库,或者像其他人已建议的那样静态链接它们。其他一些评论指出你需要“交叉编译”或者服务器不会运行64位二进制文​​件。除非您正在构建的应用程序非常复杂,否则这很容易解决。

gnatmake --GCC ='gcc -m32'

将制作一个可在32位系统上运行的二进制文件。然而,主要的问题是服务器(g)libc很可能比你的ubunu盒上的更旧。针对较新的glibc编译的程序不一定在安装了旧glibc的系统上运行。

了解更多信息和更多链接,请点击此处:

Linking against an old version of libc to provide greater application coverage
How can I link to a specific glibc version?

编辑: 此外,apache可能未配置为接受外部二进制文件的调用。您是否“尝试使用您知道存在于服务器上的程序来运行程序”?尝试运行像/ bin / ls这样的小事来确保运行程序的方法有效。如果日志不起作用,请查看日志。顺便说一下,程序需要是可执行的:chmod 755 / path / to / webeserver / uploads / ada-app

答案 2 :(得分:0)

为什么不在Web服务器而不是本地计算机上编译它?

Aswell cat /etc/issuecat /etc/release可以向我们提供有关您正在使用的分发的一些信息。