Eu fiz o download do programa de linha de comando "Whitaker's Words" que estava disponível para Linux, Windows, etc.
Existe um programa principal chamado words
. Eu tentei executá-lo na minha máquina Ubuntu (11.10) na linha de comando e funcionou:
./words
Quando eu testei no meu servidor Linux (Linux 2.6.37-he-xeon-64gb + 1 i686), também funcionou.
Então decidi aplicar algumas alterações no código-fonte e recompilá-lo. Para isso, usei os seguintes comandos (os últimos quatro são programas de suporte):
gnatmake -O3 words -bargs -static
gnatmake makedict -bargs -static
gnatmake makestem -bargs -static
gnatmake makeefil -bargs -static
gnatmake makeinfl -bargs -static
O programa resultante funcionou corretamente na minha máquina Ubuntu novamente, pois pude ver a saída correta no terminal.
Mas quando tentei executá-lo no meu servidor usando shell_exec()
ou passthru()
do PHP, simplesmente não havia saída! De acordo com ldd
, o programa é statically linked
, então deve funcionar, não é?
Estou testando e depurando há semanas e não consigo encontrar nenhum motivo para isso. Você pode me ajudar?
Você pode obter o programa aqui: link para download em filedropper.com
(Eu acho que isso não é uma questão de programação, como o meu problema é apenas: Como obter esse programa em execução no meu servidor web?)
Sistema que eu quero compilar o programa em:
Linux ubuntu 3.0.0-12-genérico # 20-Ubuntu x86 GNU / Linux
Este é o mais novo lançamento Wubi (32 bits) do Ubuntu.
ldd --version
outputs ldd (Ubuntu EGLIBC 2.13-20ubuntu5) 2.13
Sistema Eu quero rodar o programa compilado em (webserver):
Linux 2.6.37-he-xeon-64gb + 1 i686 GNU / Linux
ldd --version
outputs ldd (GNU libc) 2.7
Nota:
Erros no lado do servidor podem ser excluídos, pois tudo funciona bem se eu apenas substituir o meu próprio programa Linux pelo pré-compilado.
Atualização # 1:
Eu tentei executar o programa (que funciona bem no Ubuntu 11.10) no meu VirtualBox no Ubuntu 5.10 - e também não funcionou. Boas notícias, então definitivamente não é culpa do servidor. O Ubuntu 5.10 acabou de dizer: floating point exception
. Isso ajuda? Por que há uma exceção, mas não no Ubuntu 11.10?
Atualização nº 2:
Agora compilado com o Ubuntu 5.1 usando o GNAT 3.4. Mas toda a esperança para nada - ainda sem saída, ldd
diz statically linked
(como eu compilei dessa forma) e strace
dá a mesma mensagem de erro. O que isso significa? Existe algum arquivo faltando? É este o motivo pelo qual não está funcionando?
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 +++