MinGW + Boost:未定义引用`WSAStartup @ 8' [英] MinGW + Boost: undefined reference to `WSAStartup@8'
问题描述
以下是我执行的
D:\Just4Fun\software\> make -f Makefile.hands stest
g ++。exe -g -D_WIN32_WINNT = 0x0601 -ID:\Boost\boost_1_51_0 -LD:\Boost\boost_1_51_0\stage\lib -LD:\MinGW\lib -lboost_system- mgw46-d-1_51 -lboost_filesystem-mgw46-d-1_51 -lboost_iostreams-mgw46-d-1_51 -lws2_32 -lwsock32 -o TestSerial.exe TestSerial.cpp
是
C:\Users\oleg\AppData\Local\Temp\\ \\ ccXpC7RG.o:在函数'ZN5boost4asio6detail17winsock_init_base7startupERNS2_4dataEhh':
D:/Boost/boost_1_51_0/boost/asio/detail/impl/winsock_init.ipp:39:未定义引用'WSAStartup @ 8'C:\Users\\ \\oleg\AppData\Local\Temp\ccXpC7RG.o:在函数ZN5boost4asio6detail17winsock_init_base7cleanupERNS2_4dataE中:
D:/Boost/boost_1_51_0/boost/asio/detail/impl/winsock_init.ipp:48:undefined reference到'WSACleanup @ 0'
collect2:ld返回1退出状态
make:*** [stest]错误1
下面是检查库中有关提到的symobls的结果(我未能以适当的方式格式化)
`d:\MinGW\lib> nm - C libws2_32.a | grep WSAStartup
00000000 T WSAStartup @ 8
00000000 I imp _WSAStartup @ 8
d :\MinGW\lib> nm -C libws2_32.a | grep WSACleanup
00000000 T WSACleanup @ 0
00000000 I imp _WSACleanup @ 0
d :\MinGW\lib> nm -C libwsock32.a | grep WSACleanup
00000000 T WSACleanup @ 0
00000000 I imp _WSACleanup @ 0
d :\MinGW\lib> nm -C libwsock32.a | grep WSAStartup
00000000 T WSAStartup @ 8
00000000 I imp _WSAStartup @ 8`
因为我们看到符号存在于库中,库在相应的-L命令行选项引用的地方。
所以,为什么未定义的引用????
这是一个非常常见的错误,有一个非常简单的解决方案:放置在之后链接的库源文件和目标文件。 / p>
below is what I execute
D:\Just4Fun\software\>make -f Makefile.hands stest
g++.exe -g -D_WIN32_WINNT=0x0601 -ID:\Boost\boost_1_51_0 -LD:\Boost\boost_1_51_0\stage\lib -LD:\MinGW\lib -lboost_system-mgw46-d-1_51 -lboost_filesystem-mgw46-d-1_51 -lboost_iostreams-mgw46-d-1_51 -lws2_32 -lwsock32 -o TestSerial.exe TestSerial.cpp
below is the result of that
C:\Users\oleg\AppData\Local\Temp\ccXpC7RG.o: In function 'ZN5boost4asio6detail17winsock_init_base7startupERNS2_4dataEhh':
D:/Boost/boost_1_51_0/boost/asio/detail/impl/winsock_init.ipp:39: undefined reference to 'WSAStartup@8'C:\Users\oleg\AppData\Local\Temp\ccXpC7RG.o: In function 'ZN5boost4asio6detail17winsock_init_base7cleanupERNS2_4dataE':
D:/Boost/boost_1_51_0/boost/asio/detail/impl/winsock_init.ipp:48: undefined reference to 'WSACleanup@0'
collect2: ld returned 1 exit status
make: *** [stest] Error 1
Below is result of checking libraries regarding to mentioned symobls (I failed to format it in appropriate way)
`d:\MinGW\lib>nm -C libws2_32.a | grep WSAStartup
00000000 T WSAStartup@8
00000000 I imp_WSAStartup@8
d:\MinGW\lib>nm -C libws2_32.a | grep WSACleanup
00000000 T WSACleanup@0
00000000 I imp_WSACleanup@0
d:\MinGW\lib>nm -C libwsock32.a | grep WSACleanup
00000000 T WSACleanup@0
00000000 I imp_WSACleanup@0
d:\MinGW\lib>nm -C libwsock32.a | grep WSAStartup
00000000 T WSAStartup@8
00000000 I imp_WSAStartup@8`
As wee see symbols are existing in the libraries and libraries are on the place referred by the corresponding -L command line options.
So, why "undefined refernce"????
It's very common error, with a very simple solution: Place the libraries you link with after the source and object files.
这篇关于MinGW + Boost:未定义引用`WSAStartup @ 8'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!