首页 > 解决方案 > 从 Linux-Windows 交叉编译,stdio 有未定义的引用(到 __imp___acrt_iob_func)

问题描述

正如标题所说,我一直在尝试交叉编译一个相当大的项目,它有很多依赖项(静态库和动态库)。我已经使用 MinGW-w64 成功交叉编译了每个依赖项,将包含和库搜索路径设置为它们的 MinGW 对应项(/usr/x86_64-w64-mingw32/lib & include),但在链接步骤 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”是我项目中的文件名)

此错误以完全相同的方式重复(对象文件名除外)。链接命令如下所示:

/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

我一直在寻找解决方案(甚至是有同样问题的人)但无济于事。除了常规库之外,我从来没有精通链接,所以如果您需要更多信息,请询问。

提前致谢 :)

额外信息:

标签: c++linkercross-compilingmingw-w64

解决方案


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

这可能与我关注了 Richard Critten 评论过的问题有关(谢谢!),这导致我尝试下载并手动复制/粘贴标题和 CRT (mingw-w64-x86_64-headers-git-. .. & mingw-w64-x86_64-crt-git) 来自MSYS2 存储库。这并没有立即起作用(可能是因为我搞砸了并使用了 5.0.0 版本而不是我的版本),但它似乎做了一些事情。

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

  1. 尝试重新安装 MinGW(当然),
  2. 尝试从我提供的链接中手动添加 CRT 和标题,如果仍然不起作用,
  3. 再次尝试重新安装 MinGW。我对 apt 不是很熟悉,所以我不知道添加 CRT 和标头是否真的改变了它安装 MinGW 的方式,但我想值得一试。

更新:我在另一个系统上遇到了同样的问题。只需重新安装 MinGW 即可修复它,所以看起来文件可能存在某种问题?从早期版本更新可能会造成混乱。故事的寓意:即使您认为您的文件很好,重新安装也不会受到伤害。


推荐阅读