2016-08-04 2 views
0

부스트 1.61.0을 포함 시켰습니다. 내 C++ 프로젝트는 similar problem이고, 나는 target_link_libraries(WsServer ws2_32)을 추가하고 수정했습니다. 그런 다음 다른 오류가 나타났습니다. 코드 : WebSocket++ examples: simple_broadcast_server.cpp. 어떻게 해결할 수 있습니까?Clion에서`GetAcceptExSockaddrs '(Boost.Asio)에 대한 정의되지 않은 참조를 수정하는 방법

콘솔 :

CMakeFiles\WsServer.dir/objects.a(main.cpp.obj): In function `boost::asio::detail::socket_ops::complete_iocp_accept(unsigned long long, void*, unsigned long, sockaddr*, unsigned long long*, unsigned long long, boost::system::error_code&)': 
C:/MinGW/include/boost/asio/detail/impl/socket_ops.ipp:199: undefined reference to `GetAcceptExSockaddrs' 
CMakeFiles\WsServer.dir/objects.a(main.cpp.obj): In function `boost::asio::detail::win_iocp_socket_service_base::start_accept_op(boost::asio::detail::win_iocp_socket_service_base::base_implementation_type&, bool, boost::asio::detail::socket_holder&, int, int, int, void*, unsigned long, boost::asio::detail::win_iocp_operation*)': 
C:/MinGW/include/boost/asio/detail/impl/win_iocp_socket_service_base.ipp:495: undefined reference to `AcceptEx' 
CMakeFiles\WsServer.dir/objects.a(main.cpp.obj): In function `boost::asio::detail::win_iocp_socket_service_base::restart_accept_op(unsigned long long, boost::asio::detail::socket_holder&, int, int, int, void*, unsigned long, boost::asio::detail::win_iocp_operation*)': 
C:/MinGW/include/boost/asio/detail/impl/win_iocp_socket_service_base.ipp:520: undefined reference to `AcceptEx' 
collect2.exe: error: ld returned 1 exit status 
mingw32-make.exe[3]: *** [CMakeFiles\WsServer.dir\build.make:99: WsServer.exe] Error 1 
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:67: CMakeFiles/WsServer.dir/all] Error 2 
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:79: CMakeFiles/WsServer.dir/rule] Error 2 
mingw32-make.exe: *** [Makefile:117: WsServer] Error 2 

CMakeLists.txt는 :

cmake_minimum_required(VERSION 3.5) 
project(WsServer) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") 

set(SOURCE_FILES src/main.cpp) 

include_directories(C:/Users/Marczak/CPPLibs) 
find_package(Boost REQUIRED COMPONENTS filesystem) 
include_directories(${Boost_INCLUDE_DIRS}) 
add_executable(WsServer ${SOURCE_FILES}) 
target_link_libraries(WsServer ${Boost_LIBRARIES}) 

target_link_libraries(WsServer ws2_32) 
+0

FYI, AcceptEx() 또는 GetAcceptExSockaddrs()는 * WinSock에 대한 Microsoft 고유의 확장 *이므로 * WinSock 설명서에 따라 * 정적으로 * 컴파일 할 때 컴파일 할 수 없습니다. 'SIO_GET_EXTENSION_FUNCTION_POINTER' 연산 코드가 지정된 *로 WSAIoctl 함수를 호출하여 런타임에 AcceptEx [및 GetAcceptExSockaddrs] 함수 [**]를 얻어야합니다. 나는 그것을 내부적으로 처리 할 것으로 기대한다. –

답변

6

당신이 라이브러리를 링크 this 게시물을 볼 수 wsock32을 추가해야 할 것 같다.

+0

무슨 소리 야? 'link_libraries (ws2_32) '도 추가했지만 동일한 오류가 발생했습니다. –

+0

메인 포스트를 업데이트했습니다. CMakeLists.txt를 찾아보십시오. –

+0

ws2_32가 wsock32와 다른가요? –

관련 문제