Apache Ubuntu编译程序运行在Unix Web服务器上

Apache Ubuntu编译程序运行在Unix Web服务器上,apache,gcc,ubuntu,glibc,ada,Apache,Gcc,Ubuntu,Glibc,Ada,我用GNAT在Ubuntu上编译了一个Ada程序 之后,我试着用这个程序运行了几次测试,它运行正常 但是当我把它上传到我的ApacheUnixWebServer并试图运行该程序时,没有输出。为什么会这样 可能是在Ubuntu上编译的程序在UNIX服务器上无法运行吗 对不起,这个愚蠢的问题 我用于编译uname-a的Linux版本系统: Linux版本的系统我想在以后的uname-a上运行该程序: 在Ubuntu机器上编译时,我使用: 构建GNAT程序gnatmake my_程序时,默认情况下,它

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

之后,我试着用这个程序运行了几次测试,它运行正常

但是当我把它上传到我的ApacheUnixWebServer并试图运行该程序时,没有输出。为什么会这样

可能是在Ubuntu上编译的程序在UNIX服务器上无法运行吗

对不起,这个愚蠢的问题

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

Linux版本的系统我想在以后的uname-a上运行该程序:

在Ubuntu机器上编译时,我使用:


构建GNAT程序gnatmake my_程序时,默认情况下,它链接到动态库libgnat.so、libgnarl.so。这些库是GNAT系统的一部分,不太可能在web服务器上可用

如果您说ldd my_program,它将显示您使用的共享库

您可以强制构建使用静态GNAT库,方法是

gnatmake my_program -bargs -static
-bargs-static必须位于-O2等常规标志之后


编辑:。

当您构建GNAT程序gnatmake my_程序时,默认情况下,它链接到动态库libgnat.so、libgnarl.so。这些库是GNAT系统的一部分,不太可能在web服务器上可用

如果您说ldd my_program,它将显示您使用的共享库

您可以强制构建使用静态GNAT库,方法是

gnatmake my_program -bargs -static
-bargs-static必须位于-O2等常规标志之后


编辑:。

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

gnatmake-GCC='GCC-m32'

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

有关更多信息和更多链接,请查看此处:

编辑:
此外,apache可能未配置为接受外部二进制文件的调用。您是否尝试使用已知服务器上存在的内容运行该程序?尝试运行一些琐碎的东西,如/bin/ls,以确保运行程序的方法有效。如果不起作用,请查看日志。顺便说一下,程序需要是可执行的:chmod 755/path/to/webeserver/uploads/ada-app

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

gnatmake-GCC='GCC-m32'

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

有关更多信息和更多链接,请查看此处:

编辑:
此外,apache可能未配置为接受外部二进制文件的调用。您是否尝试使用已知服务器上存在的内容运行该程序?尝试运行一些琐碎的东西,如/bin/ls,以确保运行程序的方法有效。如果不起作用,请查看日志。顺便说一下,程序需要是可执行的:chmod 755/path/to/webeserver/uploads/ada app

为什么不在您的Web服务器上而不是本地机器上编译它呢


另外,cat/etc/issue或cat/etc/release可以为我们提供有关您正在使用的发行版的一些信息。

为什么不在您的Web服务器上而不是本地机器上编译它呢


此外,cat/etc/issue或cat/etc/release可以为我们提供有关您正在使用的发行版的一些信息。

您的Web服务器是什么特定的操作系统?首先,“uname-a”的输出是什么?切换操作系统需要重新编译并不奇怪,但我不熟悉在web服务器的终端外壳中运行Ada程序的Ada/GNATTry?我的猜测是,共享库存在一些问题,在这种情况下,ldd应该给出一个线索。您希望从64位交叉编译到32位。不是那么容易。在这种情况下,交叉编译有点过头了。在64位系统上生成32位二进制文件非常简单。使用gcc-M32您的Web服务器是什么特定的操作系统?首先,“uname-a”的输出是什么?切换操作系统需要重新编译一点也不奇怪,但我不熟悉在w

电子商务服务器?我的猜测是,共享库存在一些问题,在这种情况下,ldd应该给出一个线索。您希望从64位交叉编译到32位。不是那么容易。在这种情况下,交叉编译有点过头了。在64位系统上生成32位二进制文件非常简单。非常感谢您使用gcc-M32!例如,当我使用gnatmake-O3-bargs-static myprogram时,它可能会在我的Web服务器上工作?ldd是否在最初的show shared libs上运行了我的_程序?如果是的话,那么是的,你有更好的机会-驳船-静态需要排在最后,如我所示;按照您的方式,myprogram将只发送到活页夹,而不是生成器。当我在Web服务器上运行ldd myprogram时,它说不是动态可执行文件,而对于预编译的工作程序,我得到了LinuxGate.so.1=>0xFFFFFF000 libgcc_s.so.1=>/lib/libgcc_s.so.1 0xb777e000 libc.so.6=>/lib/libc.so.6 0xb7640000/lib/ld linux.so.2 0xb7793000现在,在使用-bargs-static重新编译程序之后,程序的大小从大约800kB增加到1100kB。不过,ldd说:不是动态可执行文件。webserver是32位的,它不会执行64位的可执行文件。非常感谢!例如,当我使用gnatmake-O3-bargs-static myprogram时,它可能会在我的Web服务器上工作?ldd是否在最初的show shared libs上运行了我的_程序?如果是的话,那么是的,你有更好的机会-驳船-静态需要排在最后,如我所示;按照您的方式,myprogram将只发送到活页夹,而不是生成器。当我在Web服务器上运行ldd myprogram时,它说不是动态可执行文件,而对于预编译的工作程序,我得到了LinuxGate.so.1=>0xFFFFFF000 libgcc_s.so.1=>/lib/libgcc_s.so.1 0xb777e000 libc.so.6=>/lib/libc.so.6 0xb7640000/lib/ld linux.so.2 0xb7793000现在,在使用-bargs-static重新编译程序之后,程序的大小从大约800kB增加到1100kB。不过,ldd说:不是动态可执行文件。webserver是32位的,它不会执行64位的可执行文件。非常感谢!交叉编译的问题已经解决了,因为我现在使用的是32位Ubuntu。仍然存在的问题是,为什么ldd返回静态链接以进行我自己的编译,而返回预编译版本的库列表。预编译版本是否不是静态的,因此它不包含库并且具有依赖关系?由于我已经静态链接了库,Apache不需要允许调用外部库,是吗?如果我没有像预编译版本那样静态链接程序,ldd说LinuxGate.so.1=>0xFFFFFF000libgnat-4.4.so.1=>找不到libgcc_.so.1=>/lib/libgcc_.so.1 0xb780e000 libc.so.6=>/lib/libc.so.6 0xb76cf000/lib/ld linux.so.2 0xb7823000。这就是问题所在吗?它说找不到…Marco,GNAT共享库找不到是我推荐的原因-首先是静态的;GNAT库随后被链接进来,因此无论Web服务器是否安装了GNAT库,可能都没有。您是否尝试过构建一个简单的“hello world”应用程序并在Web服务器上运行它?是的,我知道,但是静态程序没有生成任何输出,所以我再次尝试了动态程序。hello_world计划确实会产生输出。很有效,非常感谢!交叉编译的问题已经解决了,因为我现在使用的是32位Ubuntu。仍然存在的问题是,为什么ldd返回静态链接以进行我自己的编译,而返回预编译版本的库列表。预编译版本是否不是静态的,因此它不包含库并且具有依赖关系?由于我已经静态链接了库,Apache不需要允许调用外部库,是吗?如果我没有像预编译版本那样静态链接程序,ldd说LinuxGate.so.1=>0xFFFFFF000libgnat-4.4.so.1=>找不到libgcc_.so.1=>/lib/libgcc_.so.1 0xb780e000 libc.so.6=>/lib/libc.so.6 0xb76cf000/lib/ld linux.so.2 0xb7823000。这就是问题所在吗?它说找不到…Marco,GNAT共享库找不到是我推荐的原因-首先是静态的;GNAT库随后被链接进来,因此无论Web服务器是否安装了GNAT库,可能都没有。您是否尝试过构建一个简单的“hello world”应用程序并在Web服务器上运行它?是的,我知道,但是静态程序没有生成任何输出,所以我再次尝试了动态程序。hello_world计划确实会产生输出。在我的Ubuntu机器上,这个发布的命令确实表明没有这样的目录。有问题的命令说它是Ubuntu 11.10\n\l。在我的Web服务器上,这两个命令都不产生输出。这就是问题所在吗?这里也没有输出…@MarcoW。你确定你在网络服务器上运行Linux吗?当然可以。请参阅问题中的注释:Linux2.6.37-he-xeon-64gb+1 i686 GNU/LinuxAPT get update是否会产生一些输出?那么你应该可以下载所有
将nessecary工具添加到您的Web服务器以编译您的程序在我的Ubuntu机器上,此命令的发布确实表明没有这样的目录。有问题的命令说它是Ubuntu 11.10\n\l。在我的Web服务器上,这两个命令都不产生输出。这就是问题所在吗?这里也没有输出…@MarcoW。你确定你在网络服务器上运行Linux吗?当然可以。请参阅问题中的注释:Linux2.6.37-he-xeon-64gb+1 i686 GNU/LinuxAPT get update是否会产生一些输出?然后,您应该能够将所有nessecary工具下载到您的Web服务器,以编译您的程序
gnatmake -O3 myprogram -bargs -static
gnatmake my_program -bargs -static