2016-06-19 3 views
0

나는 다른 정적 라이브러리 (실제로 libcurl)에 의존하는 정적 라이브러리 인 LibraryB가있는 실행 파일 인 ProgramA를 가지고 있습니다. 내 프로젝트 내에서 컴파일되지 않습니다.다른 정적 라이브러리를 사용하는 정적 라이브러리가있는 확인되지 않은 외부 기호

이제 OSX에서 정상적으로 작동합니다. 나는 libcurl과 ProgramA와 LibraryB를 링크시키고 ProgramA는 잘 실행되도록한다.

그러나 Windows에, 나는 연결 오류가 계속 :

error LNK2019: unresolved external symbol __imp_curl_global_init referenced in function

내가 더블, 트리플 내가 프로젝트에 libcurl에 정적 라이브러리를 연결하고 있습니다 있음을 확인했습니다. 실제로 Visual Studio 솔루션에는 LibraryB를 사용하지 않고 대신 libcurl 라이브러리를 직접 참조하는 ProgramB라는 실행 파일이 있습니다.이 프로그램은 정상적으로 작동합니다. LibraryB를 포함하지 않는 한 해결되지 않은 오류가 다시 발생합니다.

제안 사항? 생각? 고맙습니다!

+2

동적 가져 오기에 대해 컴파일하는 것과 같지만 정적 lib에 연결하는 것처럼 들립니다. –

+1

Spot on, 내 프로젝트에서 CURL_STATICLIB 정의 문제가 해결되었습니다. 고맙습니다! – Addy

+1

미래의 참조를 위해 미해결 된 심볼의 시작 부분에있는'__imp_'가 그것을 버리는 것입니다. –

답변

1

문제는 라이브러리의 정적 버전과 연결되지만 라이브러리의 공유 버전 (DLL)을 기반으로 구축한다는 것입니다. 공유 버전 기호를 빌드 할 때 __declspec(export) (또는 .def 파일)을 사용하여 내보내고 컴파일러에서 내 보낸 심볼 이름의 시작 부분에 __imp을 추가합니다.

이 문제를 해결하려면 CURL_STATICLIB을 종속 프로젝트의 선행 처리기 정의에 추가하여 정적 라이브러리를 올바르게 빌드 할 수 있습니다.

관련 문제