2012-12-08 2 views
0

Windows 용 websocket++을 빌드하려고합니다.MinGW를 사용하여 websocket ++ 빌드하기 : 마지막 몇 가지 링커 오류 - 무엇이 될 수 있습니까?

g++ -Wall -O2 -I/c/boost/boost_1_52_0//boost chat_server.o chat.o -o chat_server -L/c/boost/boost_1_52_0//stage/lib ../../libwebsocketpp.a /c/boost/boost_1_52_0//stage/lib/libboost_system-mgw46-mt-1_52.a c/boost/boost_1_52_0//stage/lib/libboost_date_time-mgw46-mt-1_52.a c/boost/boost_1_52_0//stage/lib/libboost_program_options-mgw46-mt-1_52.a c/boost/boost_1_52_0//stage/lib/libboost_thread-mgw46-mt-1_52.a /c/boost/boost_1_52_0//stage/lib/libboost_regex-mgw46-mt-1_52.a -lpthread -lws2_32 -lmswsock 
chat_server.o:chat_server.cpp:(.text$_ZN5boost6detail17sp_counted_impl_pINS_6threadEE7disposeEv[boost::detail::sp_counted_impl_p<boost::thread>::dispose()]+0x14): undefined reference to `_imp___ZN5boost6threadD1Ev' 
chat_server.o:chat_server.cpp:(.text$_ZN5boost14checked_deleteINS_6threadEEEvPT_[void boost::checked_delete<boost::thread>(boost::thread*)]+0x11): undefined reference to `_imp___ZN5boost6threadD1Ev' 
chat_server.o:chat_server.cpp:(.text$_ZN11websocketpp4role6serverINS_8endpointIS1_NS_6socket5plainENS_3log6loggerEEEE12start_listenERKN5boost4asio2ip14basic_endpointINSB_3tcpEEEj[websocketpp::role::server<websocketpp::endpoint<websocketpp::role::server, websocketpp::socket::plain, websocketpp::log::logger> >::start_listen(boost::asio::ip::basic_endpoint<boost::asio::ip::tcp> const&, unsigned int)]+0x307): undefined reference to `_imp___ZN5boost6thread12start_threadEv' 
collect2: ld returned 1 exit status 
make: *** [chat_server] Error 1 

경로의 이중 슬래시에 신경 쓰지 마라. 그것은 나에게서 나약한 편집 메이크 파일이다.

MinGW를 사용하여 부스트 1.52도 컴파일해야했습니다.

링커는 boost::threadboost::thread::start_thread을 찾을 수 없습니다.

답변

0

그래서 저는 Lavavej 씨의 MinGW 패키지 (상자에서 나온 부스트와 함께 제공되는)를 사용하여 컴파일 된 websocket ++ 프로젝트를 얻을 수있었습니다. 나는 그것을 바닐라 MinGW에서 롤링 할 수있을 것이라고 확신한다. 부스트를 다루는 것에 대해 좀 더 체계적이 됨으로써 .... 원래 사용 된 g++을 사용했다. 펄 펄 디렉터에서 나온 것이다.

1

부스트가 boost::thread 라이브러리의 DLL 버전에 연결하려고합니다. boost::thread에 정적 라이브러리 또는 동적 라이브러리를 사용하도록 부스트를 구성 할 수있는 방법에 대해 다소 복잡한 문서는 http://www.boost.org/doc/libs/1_52_0/doc/html/thread/build.html을 참조하십시오.

정적 버전 대신 DLL 버전의 라이브러리에 링크하여 문제를 해결할 수 있어야합니다. 정적 스레드 lib의 사용을 구성하기 위해 컴파일 할 때 BOOST_THREAD_USE_LIB을 정의하여 문제를 해결할 수도 있습니다. 그러나 MinGW 컴파일러가 스레드가 종료 될 때 정적 라이브러리가 올바르게 정리하는 자동 tss 정리를 지원하는지 여부는 확실하지 않습니다.

+0

빌드 된 각 라이브러리에는 두 가지 버전 (정적 및 동적)이 있지만 모두'.a' 라이브러리입니다. 부스트를 만들 때 DLL이 만들어지지 않았습니다. 잘하면 그것을 할 수있는 매크로를 지적 주셔서 감사합니다, 나는 그것도 시도합니다. –

관련 문제