Gcc mingw交叉编译错误-未定义对“\uu mingw\u get\u msvcrt\u handle';

Gcc mingw交叉编译错误-未定义对“\uu mingw\u get\u msvcrt\u handle';,gcc,linker,mingw,rust,cross-compiling,Gcc,Linker,Mingw,Rust,Cross Compiling,我可以成功地从Linux for Windows交叉编译一个简单的hello world程序的exe。现在,我正试图交叉编译一个更复杂的程序。这是一个生锈程序,但它不是问题的原因,因为已经生成了一个.o 知道我为什么得到一个未定义的引用“\uu mingw\u get\u msvcrt\u handle”错误吗?我正在使用由rubenvb-4.7.0预先构建的工具链。 命令行是: /inst_temp/mingw32_3/mingw64/bin/x86_64-w64-mingw32-gcc -W

我可以成功地从Linux for Windows交叉编译一个简单的hello world程序的exe。现在,我正试图交叉编译一个更复杂的程序。这是一个生锈程序,但它不是问题的原因,因为已经生成了一个.o

知道我为什么得到一个未定义的引用“\uu mingw\u get\u msvcrt\u handle”错误吗?我正在使用由rubenvb-4.7.0预先构建的工具链。

命令行是:

/inst_temp/mingw32_3/mingw64/bin/x86_64-w64-mingw32-gcc -Wl,--enable-long-section-names -fno-use-linker-plugin -Wl,--nxcompat -static-libgcc -m64 -L /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib /rust.code/study/prj3/target/x86_64-pc-windows-gnu/debug/study_cross_rust.0.o -o /rust.code/study/prj3/target/x86_64-pc-windows-gnu/debug/study_cross_rust.exe -Wl,--gc-sections -L /rust.code/study/prj3/target/x86_64-pc-windows-gnu/debug -L /rust.code/study/prj3/target/x86_64-pc-windows-gnu/debug/deps -L /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib -L /rust.code/study/prj3/.rust/lib/x86_64-pc-windows-gnu -L /rust.code/study/prj3/lib/x86_64-pc-windows-gnu -Wl,-Bstatic -Wl,-Bdynamic /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/libstd-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/libcollections-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/librustc_unicode-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/librand-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/liballoc-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/liballoc_jemalloc-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/liblibc-35c36e89.rlib /mytool/var/lib/rustlib/x86_64-pc-windows-gnu/lib/libcore-35c36e89.rlib -l ws2_32 -l userenv -l advapi32 -l compiler-rt
以下是错误消息:

/inst_temp/mingw32_3/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o: In function `__mingw_prepare_except_for_msvcr80_and_higher':
/home/ruben/mingw-w64/toolchain/src/mingw-w64/tags/v2.0.3/mingw-w64-crt/crt/crtexe.c:430: undefined reference to `__mingw_get_msvcrt_handle'
collect2: error: ld returned 1 exit status

在windows上编译时,强烈建议使用multirust而不仅仅是rust。在我看来,你似乎试图以某种方式将msvc编译的rust与mingw混合。如果没有更多的信息,就不清楚事情是如何/哪里出了问题。

我发现了问题所在

我指的是交叉汇编。为了使x86_64具有rustlib,我下载了该软件包并将该库复制到我在Linux中安装的rustc下的rustlib/x86_64-pc-windows-gnu

但是,rustlang的这个rustlib中没有定义_mingw_get_msvcrt_句柄。我正在使用mingw-gcc的交叉编译器,似乎您必须使用mingw-gcc提供的lib


我的解决方案是将mingw gcc lib文件夹中的所有文件(*.a、*.o等)复制到rustlib/x86_64-pc-windows-gnu。那就行了

@Shepmaster,谢谢你的编辑这是。OP不是在Windows上编译的:“从Linux为Windows交叉编译一个exe”。如果您认为OP应该提供更多的具体信息,我鼓励您对问题进行评论。