c++ - 从 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
我一直在寻找解决方案(甚至是有同样问题的人)但无济于事。除了常规库之外,我从来没有精通链接,所以如果您需要更多信息,请询问。
提前致谢 :)
额外信息:
- 该项目之前已经成功交叉编译(从 Linux 到 Windows),此后我没有添加/删除任何依赖项。
- 我的 MinGW-w64 版本是 7.0.0
解决方案
所以,我很容易清除了 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 版本而不是我的版本),但它似乎做了一些事情。
因此,对于那些偶然发现这个问题的人,
- 尝试重新安装 MinGW(当然),
- 尝试从我提供的链接中手动添加 CRT 和标题,如果仍然不起作用,
- 再次尝试重新安装 MinGW。我对 apt 不是很熟悉,所以我不知道添加 CRT 和标头是否真的改变了它安装 MinGW 的方式,但我想值得一试。
更新:我在另一个系统上遇到了同样的问题。只需重新安装 MinGW 即可修复它,所以看起来文件可能存在某种问题?从早期版本更新可能会造成混乱。故事的寓意:即使您认为您的文件很好,重新安装也不会受到伤害。
推荐阅读
- html - 在 html 正文中的标签中显示查询值
- javascript - Google 的 diff-match-patch 用于并发更新
- reactjs - 无法使用 axios 和 ReactJS 执行获取请求
- php - SilverStripe 4 - 注销时的空白页面
- uwp - UWP 3d 视图空中建筑不透明度/透明度
- python - 数据框重复但日期增加
- javascript - 更改鼠标单击侦听器和渲染方法的顺序
- java - 如何在 ConcurrentHashMap 中添加新成员
> 没有同步或锁定 - javascript - Cocos js - Android Web 浏览器显示模糊的图像
- macos - FSEvent API 不保留文件/文件夹删除的大小写/规范化