해결되지 않은 외부 기호 [중복
-
18-09-2019 - |
문제
C#의 참조 .dll로 최종 사용을 위해 기본 C ++에서 관리 된 C ++로 많은 수의 .h 및 .lib 파일을 포장하려고합니다.
.lib 파일이 연결되어 있으며 지금까지 모든 것이 순조롭게 진행되었습니다. 최신 .h 파일을 줄이면 2 개의 함수가 링크 오류와 함께 돌아 왔을 때 SNAG를 쳤다.
error LNK2019: unresolved external symbol __imp__htonl@4 referenced in function
"public: void __thiscall Field::setCharacter(unsigned char,int)"
(?setCharacter@Field@@QAEXEH@Z) myutils.lib
나는 언급했다 myutils.lib
링커 옵션에서 문제가되지 않아야합니다.
이상한 점은이 특정 .h 파일에 약 20 개의 기능이 있고 나머지는 3 가지 기능을 제외하고는 잘 연결되어 있다는 것입니다.
어떤 아이디어?
해결책
누락 된 기호는입니다 __imp__htonl@4
, HTONL의 C ++ Mangled 이름으로 긴 값을 호스트에서 네트워크 순서로 변환하는 함수입니다. @4는 입력 매개 변수를 조작하는 데 사용되며 링커가 이름 충돌없이 올바른 함수를 해결할 수 있도록 과부하 된 함수에 대한 C ++ 지원의 일부입니다.
이 기호를 참조하는 네트워크 라이브러리에 연결되어 있는지 확인하십시오. 아마도 패키지는 매크로 대신이 기호의 특별한 정의를 사용하고있을 것입니다.
다른 팁
서명이 일치합니까? 서명과 성별을 확인하십시오. 또한 기능이 감소하지 않도록하십시오.
라이브러리에 대해 편집 한 다음 링크하기 전에 라이브러리를 변경했을 때이 오류가 발생했습니다. 헤더가 라이브러리에서 제공 한 동일한 헤더인지 확인하십시오 (다른 아키텍처에서 복사하지 않음). 물론 WS2_32.lib (mingw/gcc의 경우 -lws2_32)와 연결하고 있는지 확인하십시오.
또한 GCC/MINGW를 사용하는 경우 다음을 살펴볼 수 있습니다. Mingw 링커 오류 : Winsock