我已经下载了命令行程序“Whitaker’s Words”,该程序可用于Linux以及Windows等.

有一个名为words的主程序.我尝试在命令行上的Ubuntu(11.10)机器上执行它,它工作正常:

./words

当我在我的Linux网络服务器(Linux 2.6.37-he-xeon-64gb 1 i686)上测试它时,它也能正常工作.

然后我决定对源代码应用一些更改并重新编译它.为此,我使用了以下命令(后四个是支持程序):

gnatmake -O3 words -bargs -static

gnatmake makedict -bargs -static

gnatmake makestem -bargs -static

gnatmake makeefil -bargs -static

gnatmake makeinfl -bargs -static

由此产生的程序再次在我的Ubuntu机器上正常工作,因为我可以在终端中看到正确的输出.

但是当我尝试使用PHP的shell_exec()或passthru()在我的网络服务器上执行它时,根本没有输出!根据ldd,该程序是静态链接所以它应该真的有用,不应该吗?

我已经进行了几周的测试和调试,我找不到任何理由这样做.你能帮助我吗?

(我想这不是编程问题,因为我的问题只是:如何在我的网络服务器上运行该程序?)

系统我想编译程序:

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

这是Ubuntu最新的Wubi(32位)版本.

ldd –version输出ldd(Ubuntu EGLIBC 2.13-20ubuntu5)2.13

系统我想在(webserver)上运行已编译的程序:

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

ldd –version输出ldd(GNU libc)2.7

注意:

服务器端的错误可以被排除,因为如果我只用预编译的程序替换我自己的Linux程序,一切正常.

更新#1:

我已经尝试在Ubuntu 5.10下的VirtualBox中运行程序(在Ubuntu 11.10下运行正常) – 它也没有用.好消息,所以这绝对不是服务器的错. Ubuntu 5.10刚才说:浮点异常.这有帮助吗?为什么有一个例外而不是Ubuntu 11.10?

更新#2:

现在用Ubuntu 5.1使用GNAT 3.4编译.但是所有的希望都没有 – 仍然没有输出,ldd说静态链接(因为我已经这样编译)和strace给出相同的错误信息.这是什么意思?有没有文件丢失?这是它无法正常工作的原因吗?

execve("./words", ["./words"], [/* 15 vars */]) = 0

brk(0) = 0x811e000

access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)

mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76f8000

access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)

mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76f7000

set_thread_area({entry_number:-1 -> 6, base_addr:0xb76f7680, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0

--- SIGSEGV (Segmentation fault) @ 0 (0) ---

+++ killed by SIGSEGV +++

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐