Eclipse C++,通过cmd编译可以,在eclipse中编译不行

问题描述 投票:0回答:1

我有一个使用winsock库的TCP客户端程序(TCPClient.cpp)。如果我使用命令行进行以下调用,则会成功生成 *.exe:

g++ TCPClient.cpp -o TCPClient.exe -lws2_32

当我尝试使用 MinGW 在 Eclipse/C++ 中编译和链接相同的脚本时,我似乎生成了 *.o 文件,但在生成 *.exe 时出现错误。 因此,如果 Ecplise/C++ 执行以下操作(链接器调用),则会生成错误:

g++ -o TCPClient.exe TCPClient.o -lws2_32 

我收到多个错误:

在\ld.exe中输入C:\MinGW:矮人错误:找不到缩写数字84。
./src/TCPClient.o:cygming-crtbegin.c:(.text+0x2a0):
的多重定义 _mingw32_init_mainargs
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o:(.text+0x2a0):首先在这里定义 C:\MinGW in\ld.exe: 矮人错误: 找不到缩写号码 84。 ./src/TCPClient.o:cygming-crtbegin.c:(.text+0x2e0):
的多重定义

mainCRTStartup' c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o:(.text+0x2e0): first defined here C:\MinGW\bin\ld.exe: Dwarf Error: Could not find abbrev number 84. ./src/TCPClient.o:cygming-crtbegin.c:(.text+0x300): multiple definition of     
WinMainCRT启动' c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o:(.text+0x300):首先在这里定义 C:\MinGW in\ld.exe: 矮人错误: 找不到缩写号码 84。 ./src/TCPClient.o:cygming-crtbegin.c:(.text+0x320):
atexit' c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o:(.text+0x320): first defined here C:\MinGW\bin\ld.exe: Dwarf Error: Could not find abbrev number 84. ./src/TCPClient.o:cygming-crtbegin.c:(.text+0x330): multiple definition of 
_onexit'的多重定义 c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o:(.text+0x330):首先在这里定义 C:\MinGW in\ld.exe: 矮人错误: 找不到缩写号码 84。 ./src/TCPClient.o:cygming-crtbegin.c:(.text+0x340):
的多重定义 `__gcc_register_frame' c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtbegin.o:cygming-crtbegin.c:(.text+0x0): 第一个 此处定义 C:\MinGW in\ld.exe: 矮人错误: 找不到缩写号码 84.here

以下内容很有趣: 如果我使用 cmd 行并首先生成 .o 文件,然后尝试生成 *.exe,我会得到相同的错误。 cmd 行中的以下两个调用都会导致上面的错误:

g++ TCPClient.o -o TCPClient.exe -lws2_32

g++ TCPClient.o -o TCPClient.exe 

这意味着:如果在 cmd 行中我仅指定要生成(来自我的 *.cpp 的 *.exe),则一切正常。但是 - 作为用户 - 单独执行这两个步骤是行不通的。

Cmd-Line g++ 调用似乎“知道”在这里要做什么。作为用户,我在直接生成 *.exe 时从未看到 *.o 文件。但我认为无论如何它都必须生成?我错了吗?为什么没有进一步说明的 cmd-line 知道如何处理 .o 文件? ...是否可以从任何来源找出通过命令行调用时对“g++”的调用会做什么?当然我希望在 eclipse/c++ 中集成相同的设置。

c++ eclipse mingw cmdline-args
1个回答
0
投票

g++ TCPClient.cpp -o TCPClient.exe -lws2_32

如果对 exe 文件使用 -O(大写字母,而不是零)而不是 -o,则会出现该错误。

© www.soinside.com 2019 - 2024. All rights reserved.