欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Dev C++的undefined reference to `__imp_htons'或codeclock的undefined reference to'WSAStartup [email protected]'相关编译器错

程序员文章站 2022-03-15 22:35:00
...

实在是忍不住吐槽,确实是花费了很多时间来解决,度娘搜索有时候差一点关键字就搜不到想要的(准确是差十万八千里)。总结一下吧,上面两个问题我都遇到了,同一段代码不同编辑器,类似的是都是显示未定义相关。未引入头文件的缘故。我测试的是一段简单的Socket程序。 
如果是codeblock问题可以往下跳转,跳过前奏: 
DEVC++报错:

C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0x3f): undefined reference to `__imp_WSAStartup'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0x6b): undefined reference to `__imp_socket'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0xa9): undefined reference to `__imp_htons'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0xdc): undefined reference to `__imp_bind'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0x105): undefined reference to `__imp_closesocket'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0x155): undefined reference to `__imp_recvfrom'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0x182): undefined reference to `__imp_inet_ntoa'
C:\Users\persenal computer\Desktop\test\Server.o    Server.cpp:(.text+0x1f3): undefined reference to `__imp_sendto'
e:\dev c++\dev-cpp_gr\dev-cpp\mingw64\x86_64-w64-mingw32\bin\ld.exe Server.o: bad reloc address 0x10 in section `.xdata'
C:\Users\persenal computer\Desktop\test\collect2.exe    [Error] ld returned 1 exit status
25      C:\Users\persenal computer\Desktop\test\Makefile.win    recipe for target 'Server.exe' failed

上述错误就是一堆未定义,一般这时dev会跳转到自动生成的Makefile.win文件里,并在这里

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

显示报错信息,很明显是连接出了错误导致未成功生成.exe文件,并不是代码问题,也就是环境问题了,然后我通过更换编译g++版本、换成32位编译(说实话问题确实出在64和32这里了,但不知道为啥dev不认账非得按64位编译的来,也许没设置对)等都出不来,于是乎我就更换了codeclock尝试。 
发现了codeblock报以下错误:

||=== Client, Debug ===|
\Client\src\Client.cpp|8|warning: ignoring #pragma comment |
\Client\src\Client.cpp||In function 'int main(int, char**)':|
\Client\src\Client.cpp|14|error: 'WSASitartup' was not declared in this scope|
||=== Build finished: 1 errors, 1 warnings ===|

很相似的错误,确实就是环境问题了,我对codeblock比较熟悉,因此上述错误在我调试下可以通过 
针对10.05(比较老)的版本: 
Settings -> Compiler and debugger-> Global compiler settings-> Linker settings 
针对13.12版本: 
Settings -> Compiler settings -> Global compiler settings-> Linker settings 
注意我标注黑体部分路径你们肯定是要按照自己codeblocks的安装路径变换的,然后在Others linker Options里面添加:-lws2_32,重启codeblocks,测试一下应该就好了,如果还是不行,在刚刚的路径下的Link libraries里面点击Add按钮输入C:\ProgramFiles(x86)\CodeBlocks\MinGW\lib\libws2_32.a 
记住标黑体的要根据自己安装路径来更换。

Dev C++的undefined reference to `__imp_htons'或codeclock的undefined reference to'WSAStartup [email protected]'相关编译器错

既然找到真正问题所在,然后更换到dev上去更改(因为他们g++都是一样的),我们在:工具->编译选项(第一项) 打开后下面有个"在连接器命令行加入以下命令",打上勾,如果-static-libgcc这些的话,删掉,并且加上-lws2_32保存就可以了。

Dev C++的undefined reference to `__imp_htons'或codeclock的undefined reference to'WSAStartup [email protected]'相关编译器错

吐槽以下,dev这个编译器要不是改别人代码我真不会去用它,很多设置看不懂.........也许我还是太年轻

+