【问题标题】:Linux shell doesn't execute my c programLinux shell 不执行我的 c 程序
【发布时间】:2012-12-25 09:26:22
【问题描述】:

在一些服务器更新后,我无法执行 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;
}    

问候,蒂亚戈

【问题讨论】:

  • 文件是否可执行?试试 chmod a+x aesdecrypt。另外,显示文件 aesdecrypt 的输出
  • 看到ls -l aesdescript 也会很有趣。
  • 您输入aesdecript,但shell 打印出aesdecrypt。这里有些不合时宜。
  • 附带说明,将二进制文件放在名为“src”的目录中是一种不好的做法
  • 它是可执行的(777),问题不在于程序,我已将代码更改为#include #include #include #include #include #include #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!"); / 打印 Magick Teste! */ /*if( argc

标签: c linux bash shell ubuntu


【解决方案1】:

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

sudo apt-get install ia32-libs

这可能是升级后丢失的内容。更多信息,请参阅this article

【讨论】:

  • 我刚刚安装了 ia32-libs,但我遇到了同样的问题,但我猜你对我问题的原因是正确的。
  • @user1966670:这是我遇到的这种奇怪行为的唯一可能原因。除此之外,为什么还要为 32 位系统编译该二进制文件?为什么不把它编译成原生的 64 位 ELF?
  • 我要编译成64位
【解决方案2】:

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

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

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

/bin/sh 阻塞了 C 语法。

你需要先编译它,例如:

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

【讨论】:

  • Aesdecrypt 不是源代码,几天前它还在工作,经过一些服务器更新后我开始收到此错误。
【解决方案3】:

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

【讨论】:

  • 我不认为这是问题所在。它没有说图书馆 X 在任何地方都找不到。
  • @FUZxxl 在缺少库时不会这么说。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 2012-03-06
  • 2014-03-26
相关资源
最近更新 更多