Linux shell无法执行我的C程序

3

在服务器更新后,我无法执行一个C程序(昨天还能用,但是有些东西改变了导致了这个问题)。

我在/home/int/exe/文件夹中有一个名为aesdecript的C程序,权限为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;
}    

问候,Tiago


文件可执行吗?请尝试使用 chmod a+x aesdecrypt 命令。同时,展示一下 file aesdecrypt 的输出结果。 - fuz
5
您输入了aesdecript,但是终端显示出aesdecrypt。这里有些不符合。 - Daniel Fischer
作为附注,将二进制文件放在名为“src”的目录中是不好的做法。 - Khaur
它是可执行的(777),问题不在程序上,我已经更改了代码以#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 0int 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; } - user1966670
你能打印出编译和运行的所有步骤,以及可能的ls -l输出吗? - fuz
显示剩余6条评论
3个回答

6

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

sudo apt-get install ia32-libs

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


我刚刚安装了ia32-libs,但是我遇到了同样的问题,不过我猜你说的导致问题的原因是正确的。 - user1966670
@user1966670:这是我遇到的唯一可能导致奇怪行为的原因。除此之外,你为什么要为32位系统编译二进制文件呢?为什么不将其编译为本机64位ELF格式呢? - user405725
我要编译成64位。 - user1966670

1

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

如果aesdecrypt是您的C 程序的名称,则无法直接执行它。

Shell尝试将其作为脚本执行,由于它没有以#!行开头,因此它被认为是一个/bin/sh脚本。

/bin/sh无法处理C语法。

您需要先编译它,例如:

mv aesdecrypt aesdecrypt.c
gcc aesdecrypt.c -o aesdecrypt
./aesdecrypt

Aesdecrypt不是源代码,几天前它还能工作,但在某次服务器更新后,我开始收到这个错误。 - user1966670

-1

很可能您缺少一个或多个与您的aesdecript程序相关联的库。使用ldd实用程序检查它所涉及的库/库。


我认为这不是问题所在。它并没有说找不到库X的任何地方。 - fuz
2
@FUZxxl 当库文件缺失时,它不会提示这个。 - Friek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接