gpt4 book ai didi

c++ - Linux MinGW : on compiling he output list of 8 "nultiple definitions"

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:29 25 4
gpt4 key购买 nike

大家好!

我尝试在 Linux 上使用 MinGW 编译程序:

i686-w64-mingw32-g++ -static -mwindows ./obj/CFLF.o ./obj/resources.o -o ./bin/CFLF.exe

并捕获此输出:

./mingw-w64-crt/crt/crtexe.c:171: multiple definition of `WinMainCRTStartup'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/../../../../i686-w64-
mingw32/lib/../lib/crt2.o:./mingw-w64-crt/crt/crtexe.c:171: first
defined here
./obj/CFLF.o: In function `mainCRTStartup':
./mingw-w64-crt/crt/crtexe.c:199: multiple definition of `mainCRTStartup'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/../../../../i686-w64-
mingw32/lib/../lib/crt2.o:./mingw-w64-crt/crt/crtexe.c:199: first
defined here
./obj/CFLF.o:cygming-crtbegin.c:(.text+0x500): multiple definition of `__gcc_register_frame'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/crtbegin.o:cygming-crtbegin.c:
(.text+0x0): first defined here
./obj/CFLF.o:cygming-crtbegin.c:(.text+0x560): multiple definition of __gcc_deregister_frame'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/crtbegin.o:cygming-crtbegin.c:
(.text+0x60): first defined here
./obj/CFLF.o:crtexe.c:(.CRT+0x10): multiple definition of `mingw_pcinit'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/../../../../i686-w64-
mingw32/lib/../lib/crt2.o:./mingw-w64-crt/crt/crtexe.c:118: first
defined here
./obj/CFLF.o:crtexe.c:(.data+0x0): multiple definition of `__mingw_winmain_nShowCmd'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/../../../../i686-w64-
mingw32/lib/../lib/crt2.o:./mingw-w64-crt/crt/crtexe.c:118: first
defined here
./obj/CFLF.o:crtexe.c:(.CRT+0x4): multiple definition of `mingw_pcppinit'
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/../../../../i686-w64-
mingw32/lib/../lib/crt2.o:./mingw-w64-crt/crt/crtexe.c:118: first
defined here
/usr/lib/gcc/i686-w64-mingw32/6.2-win32/crtbegin.o:cygming-crtbegin.c:
(.text+0x22): undefined reference to `_Jv_RegisterClasses'
为什么?我的代码的重点是 WinMain,而不是 WinMainCRTStartup 或 mainCRTStartup。

我写link to code ,因为太大了(GitHub)。

P.S.:我在 Windows 上使用 MinGW 编译此代码,没有出现此错误。P.P.S.:为什么我不使用 Windows?仅用于基础教育。

最佳答案

问题在于您创建的不是目标文件,而是您随后尝试链接在一起的可执行文件。

命令

i686-w64-mingw32-g++ ./src/main.cpp ./src/downloader.cpp -o ./obj/CFLF.o -lwinhttp

应该是

i686-w64-mingw32-g++ ./src/main.cpp -c -o ./obj/main.o

这将创建您在稍后阶段用于实际链接的对象文件./obj/main.o。三大区别是,您不提供多个源文件,您使用 -c 选项将告诉 GCC 前端程序仅编译为目标文件,并且您不提供库(仅在链接时使用)。

需要对所有源文件执行此操作。

然后您可以将所有目标文件链接在一起:

i686-w64-mingw32-g++ ./obj/main.o ./obj/downloader.o ./obj/resources.o -o ./bin/CFLF.exe -lwinhttp

关于c++ - Linux MinGW : on compiling he output list of 8 "nultiple definitions",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com