c - 无法运行用 clang/lld/mingw 编译的 windows 二进制文件

标签 c windows llvm-clang mingw-w64 lld

我已经从 http://releases.llvm.org/download.html 下载并在 Windows 10 上安装了 clang 和来自 https://sourceforge.net/projects/mingw-w64/ 的 mingw

我正在尝试使用 clang/lld/mingw 编译一个非常基本的 C 程序:

int main(int argc, char* argv[argc + 1])
{
  return 0;
}

为了编译我调用:

clang.exe -target x86_64-windows-gnu -fuse-ld=lld.exe -g -gcodeview -Wl,/debug,/pdb:example.pdb example.c -o example.exe

这会创建一个在 mainCRTStartup(准确地说是 __security_init_cookie)中启动时出错的 exe。

但是,从 binutils 使用默认 ld 运行是成功的:

clang.exe -target x86_64-windows-gnu example.c -o example.exe

请注意,我希望使用 mingw header ,而不是 msvc。

我总共尝试了:

  • x86_64-8.1.0-posix-seh-rt_v6-rev0
  • x86_64-7.3.0-posix-seh-rt_v5-rev0
  • x86_64-8.1.0-win32-seh-rt_v6-rev0
  • x86_64-8.1.0-win32-sjlj-rt_v6-rev0

没有任何运气生成一个功能程序。

所以我想知道,我在这里做错了什么吗?

编辑: 我也试过 msys2 无济于事。具体来说:

pacman -S mingw-w64-x86_64-clang mingw-w64-x86_64-lld

最佳答案

根据 https://bugs.llvm.org/show_bug.cgi?id=40568

Linking against mingw import libraries from a normal mingw installation is a new feature, first present in LLD 8.

除非想编译一个预发布版本的lld,否则必须等待llvm 8.0.0 的二进制发布。这有望在 3 月的某个时候进行。

关于c - 无法运行用 clang/lld/mingw 编译的 windows 二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54382944/

相关文章:

c - 为什么我的程序在使用 sigaction 时会出现异常行为?

c# - 从 C# Windows 应用程序读取/写入三星安卓手机/平板电脑

c++ - llvm builder 向基本 block 添加终止符

c++ - 如何将 Compiler 实例和 ASTConsumer 与 clang 3.6 一起使用

c++ - 检查真实文件后的假文件 "exist"?

c++ - 如何将 C++11 代码编译为 webassembly?

c - 标记字符串并将其作为数组返回

c - 多个客户端未连接且无法同时通信

无符号整数递增会导致未定义的行为吗?

windows - 如何使用一次性 Windows VM 镜像设置测试环境?