C++ 从Linux Windows交叉编译时,stdio有未定义的引用(到_imp__acrt_iob_func)

C++ 从Linux Windows交叉编译时,stdio有未定义的引用(到_imp__acrt_iob_func),c++,linker,cross-compiling,mingw-w64,C++,Linker,Cross Compiling,Mingw W64,正如标题所说,我一直在尝试交叉编译一个相当大的项目,其中包含许多依赖项(静态库和动态库)。我已经使用MinGW-w64成功地交叉编译了每个依赖项,将include和library搜索路径设置为它们的MinGW对应项(/usr/x86_64-w64-mingw32/lib和include),但是在链接步骤上,MinGW为printf的每个调用抛出一个错误(当然包括stdio.h)。错误如下: /usr/bin/x86_64-w64-mingw32-ld: ./obj/XXXX.o:/usr/sha

正如标题所说,我一直在尝试交叉编译一个相当大的项目,其中包含许多依赖项(静态库和动态库)。我已经使用MinGW-w64成功地交叉编译了每个依赖项,将include和library搜索路径设置为它们的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 Criten评论的问题(谢谢!),这导致我尝试从中下载并手动复制/粘贴标题和CRT(mingw-w64-x86_64-headers-git-…&mingw-w64-x86_64-CRT-git)。这并没有立即起作用(可能是因为我搞砸了,使用了5.0.0版本而不是我的版本),但它似乎做了些什么

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

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

  • 更新:我在另一个系统上遇到了完全相同的问题。只需重新安装MinGW就可以修复它,所以看起来可能是文件出现了某种问题?从早期版本进行更新可能会造成混乱。这个故事的寓意是:即使你认为你的文件很好,重新安装也不会有什么坏处。

    类似的问题可能取决于版本。那些看起来可疑的相似之处,我会检查它们