【问题标题】:Clang compilation : "Cannot execute binary file"Clang 编译:“无法执行二进制文件”
【发布时间】:2021-10-21 17:30:36
【问题描述】:

我是 clang++ 编译器标志的新手。我有一个关于编译的问题。这是我的cmd:

clang++ -I ../llvm-project/llvm/include -I ../llvm-project/clang/include 
  -I ../llvm-project/build/tools/clang/include -I ../llvm-project/build/include 
  -O3 -c $(llvm-config-7 --cxxflags) 
  projectToTestHeadersBuilding.cpp -o projectToTestHeadersBuilding

我收到错误:

./projectToTestHeadersBuilding: cannot execute binary file: Exec format error

执行后我有projectToTestHeadersBuilding 文件。但我无法运行可执行文件。您能帮我了解如何获取可执行文件,以便我可以使用./projectToTestHeadersBuilding 运行它吗?

【问题讨论】:

  • 这能回答你的问题吗? how to run the .o file after make
  • 你好,不,它没有。我没有可执行文件。我只得到 .o 文件。 -bash: ./projectToTestHeadersBuilding: 无法执行二进制文件:执行格式错误
  • -c 文件指定 clang 应该编译共享对象库而不是可执行文件。您正在编译一个共享对象。共享对象不可执行。
  • @h0r53 - -c 表示你得到一个对象,而不是共享对象。
  • 该链接确实回答了您的问题,您只需阅读所有答案。此外,这些标志并不是 clang 独有的。 gcc 也会遇到这个问题。

标签: c++ clang llvm clang++


【解决方案1】:

在您的初始命令中,您使用-c 标志,它使clang 输出object file。这是已编译程序的一部分,但不是完整的可执行文件,为了获得最终的可执行文件,您必须执行链接步骤,通常与其他目标文件一起。

一个简单的编译可以这样完成:

clang++ projectToTestHeadersBuilding.cpp -c -o projectToTestHeadersBuilding.o
clang++ projectToTestHeadersBuilding.o -o projectToTestHeadersBuilding
./projectToTestHeadersBuilding

通常我们不需要显式地传递您传递的所有-I 标志。如果您的设置需要它们,请将它们添加到我上面包含的命令中。

【讨论】:

  • 您能否指定我应该如何将 -I 和 -O3 -c $(llvm-config-7 --cxxflags) 添加到执行行?因为如果我删除它们会给我带来一堆错误
  • @FarrukhNabiyev 只需将它们添加到末尾即可。
  • 谢谢。但是运行此命令后我没有得到 projectToTestHeadersBuilding 文件。我收到警告和两个文件 projectToTestHeadersBuilding.cpp 和 projectToTestHeadersBuilding.o
  • 运行第二条命令
  • 部分库有问题,谢谢。我已经编译成功了
猜你喜欢
  • 2016-02-07
  • 2011-04-14
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多