3

在一些服务器更新后,我无法执行 C 程序(它昨天还在工作,我的服务器发生了一些变化,导致了这个问题)。

我在这个文件夹 /home/int/exe/ ac 名为 aesdecript 的程序具有 777 权限。因此,如果以 root 身份键入以下命令:

$ cd /home/int/exe/
$ ./aesdecrypt
-bash: /home/int/exe/aesdecrypt: No such file or directory
$ sh aesdecrypt
aesdecrypt: 1: Syntax error: "(" unexpected
$ ldconfig aesdecrypt
ldconfig: relative path `aesdecrypt' used to build cache
$ system("/home/int/exe/aesdecrypt")
-bash: syntax error near unexpected token `"/home/int/exe/aesdecrypt"'

aesdecrypt 是一个 C 程序。

有人知道吗?该程序几天前正在运行。

下面是aesdecrypt源代码:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>

#include "aes.h"

int aes_crypt_decrypt(int encrypt, char *finput, char *foutput);

#define TRUE 1
#define FALSE 0

int main(int argc, char **argv) {
    puts("Oi mundo!"); /* prints Magick Teste! */
    /*if( argc < 3 )
        return (1);

aes_crypt_decrypt( TRUE, argv[1], argv[2] );*/
return EXIT_SUCCESS;
}    

问候,蒂亚戈

4

3 回答 3

6

您描述的症状与您尝试在 64 位系统上执行 32 位二进制文​​件时遇到的症状非常相似,并且 32 位“仿真”不可用。在这种情况下,即使二进制文件是可执行的并且一切正常,系统错误代码也是“没有这样的文件或目录”。为了解决此问题,请使用以下命令安装对 32 位可执行文件的支持:

sudo apt-get install ia32-libs

这可能是升级后丢失的内容。有关更长的故事,请参阅这篇文章

于 2013-01-10T21:13:56.353 回答
1

更新:在评论中,OP 向我们展示了 的输出file aesdescrypt,这与我在这个答案中所做的假设不一致。一旦问题得到解决,我可能会删除这个答案,如果不是更早的话。

如果aesdecrypt是你的 C源程序的名字,你不能直接执行它。

shell 试图将其作为脚本执行,并且由于它不是以#!行开头,因此它假定它是一个/bin/sh脚本。

/bin/sh阻塞 C 语法。

您需要先编译它,例如:

mv aesdecrypt aesdecrypt.c
gcc aesdecrypt.c -o aesdecrypt
./aesdecrypt
于 2013-01-10T21:14:13.537 回答
-1

您很可能缺少与您的 aesdescript 程序链接的一个或多个库。使用 ldd 实用程序检查它所关注的库。

于 2013-01-10T21:12:08.183 回答