可执行文件在启动时显示 "line 1: ELF: not found"

Executable says "line 1: ELF: not found" when starts

我尝试为我的路由器 Xiaomi Router 3gcmake 构建一个简单的 hello, world ELF。它运行

Linux OpenWrt 4.14.95 #0 SMP Wed Jan 30 12:21:02 2019 mips GNU/Linux

我用the sdk for ramips platform (my router's platform).

想法是使用 $(PKG_BUILD_DIR) 作为执行外部构建的目录(通常通过 mkdir build ; cd build ; cmake .. 完成)

构建成功完成,当我将它安装到我的路由器上并启动它时,它失败了:

root@OpenWrt:~# chw
/usr/bin/chw: line 1: ELF: not found
/usr/bin/chw: line 2: syntax error: unexpected "("

当我构建没有 cmakeELF 时(

  1. 注释掉行 include $(INCLUDE_DIR)/cmake.mk,
  2. 取消注释 define Build/Prepare 部分中的 $(CP) ...
  3. 删除 define Build/Compile 部分

),它工作得很好:它打印 Hello, World!.

日志文件是 here.config 文件是 here

源代码可用 here

这里是源代码:

main.c:

#include <stdio.h>

int main()
{
    printf("Hello, World!");
    return 0;
}

CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)

project (chw)

add_executable(chw main.c)

install(TARGETS chw DESTINATION /usr/bin)

Makefile:

include $(TOPDIR)/rules.mk

PKG_NAME:=chw
PKG_VERSION:=0.1
PKG_RELEASE:=1

PKG_MAINTAINER:=John Doe <john.doe@example.com>
PKG_LICENSE:=CC0-1.0

include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk

define Package/chw
    SECTION:=utils
    CATEGORY:=Utilities
    TITLE:=Hello world application
    URL:=https://www.example.com
endef

define Package/chw/description
    hello world application
endef

define Build/Prepare
    mkdir -p $(PKG_BUILD_DIR)
    # $(CP) ./src/{main.c,Makefile} $(PKG_BUILD_DIR)/
endef

define Build/Configure
    cmake -B $(PKG_BUILD_DIR) -S ./src
endef

define Build/Compile
    $(call Build/Compile/Default,-C $(PKG_BUILD_DIR))
endef

define Package/chw/install
    $(INSTALL_DIR) $(1)/usr/bin
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/chw $(1)/usr/bin/
endef

$(eval $(call BuildPackage,chw))

显然您的目标系统不支持执行 ELF 文件,或者无法将您的文件识别为 ELF 文件。

在类UNIX系统上执行文件时,如果内核识别为可执行格式,则直接执行。如果不是,如果顶部没有 #! 行,它将尝试使用 /bin/sh 作为 shell 脚本执行它。它是一个二进制文件,但二进制文件和文本文件之间并没有真正明确的区别。

shell 显然试图将文件的开头(包括字符 ELF)解释为命令,但无法在 $PATH 中找到该命令.

您需要找到一种方法来生成您的目标系统能够识别和接受的可执行文件。 (我不知道该怎么做。)

除了此处的其他答案外,"line 1: ELF: not found, line 2: syntax error: unexpected "("" 的可能原因很简单:

您是运行64 位 程序,在32 位 机器上运行。尝试更改您的编译配置。

您是否记得更改文件 属性 以使其可执行?

chmod +x filename

我知道我在下载某些东西(通常是安装二进制文件)时经常忘记这一步。 只是一个想法!