从 Linux-Windows 交叉编译,stdio 具有未定义的引用(对 __imp___acrt_iob_func)

Cross Compiling from Linux-Windows, stdio has undefined references (to __imp___acrt_iob_func)

正如标题所说,我一直在尝试交叉编译一个具有相当多依赖项(静态库和动态库)的相当大的项目。我已经使用 MinGW-w64 成功交叉编译了每个依赖项,将包含和库搜索路径设置为它们的 MinGW 对应项(/usr/x86_64-w64-mingw32/lib 和包含),但在链接步骤中,MinGW 每次调用 printf 时都会抛出错误(当然包括 stdio.h)。错误如下:

/usr/bin/x86_64-w64-mingw32-ld: ./obj/XXXX.o:/usr/share/mingw-w64/include/stdio.h:352: undefined reference to `__imp___acrt_iob_func'

(其中“XXXX”是我项目中的文件名)

此错误重复完全相同(object 文件名除外)。链接命令如下所示:

/usr/bin/x86_64-w64-mingw32-g++ -o bin/ReleaseWin/Project @[file with object file names] -L. -L/usr/x86_64-w64-mingw32/lib/ [linking some dependencies (boost, openGL, SDL2, etc.)...] -m64 -flto

我已经搜索了一个解决方案(或什至有人有同样的问题)无济于事。我从未 well-versed 链接过常规图书馆,所以如果您需要更多信息,请询问。

提前致谢:)

额外信息:

所以,我 apt-get 清除了 mingw-w64 和 mingw-w64-common,重新安装了 mingw-w64,现在它正在工作...

这可能与我遵循 Richard Critten 评论的问题(谢谢!)有关,这导致我尝试下载并手动 copy/pasting headers 和 CRT( mingw-w64-x86_64-headers-git-... & mingw-w64-x86_64-crt-git) 来自 the MSYS2 repository。这并没有立即奏效(可能是因为我搞砸了并使用了 5.0.0 版本而不是我的版本),但它似乎做了一些事情。

因此,对于那些偶然发现这个问题的人,

  1. 试试 re-install 的 MinGW(当然),
  2. 尝试从我提供的 link 中手动添加 CRT 和 headers,如果仍然无效,
  3. 再次尝试 re-installing MinGW。我对 apt 不是很熟悉,所以我不知道添加 CRT 和 headers 是否真的改变了它安装 MinGW 的方式,但我认为值得一试。

更新:我在另一个系统上遇到了完全相同的问题。只需重新安装 MinGW 即可修复它,所以看起来文件可能存在某种问题?从早期版本更新可能会弄乱事情。这个故事的寓意:即使您认为您的文件很好,重新安装也无妨。