2016-10-01 3 views
0

unique_ptr 자유롭게 제목을 편집 : 솔직히이 질문에 대한 중요한 정보를 무엇인지 잘 모릅니다 ... 나는 아주 이상한보고하고이상한 '누락 된 수입 기호는'표준을 사용하는 경우 :

(gRPC 및 Kinect10 SDK에 대해 작성된 pRt 유형은 gRPC 정적 라이브러리에 정의되어 있습니다.)하지만 std :: unique_ptr을 사용할 때만 기호를 누락했습니다. 나는 실제로 ptr을 사용하고 있지는 않지만 (아직) ptr을 사용하고 있지는 않지만, ptr을 네이티브로 변환하면 오류가 발생하지 않습니다.

왜 이런 일이 일어날 수 있습니까? 오류 LNK2019 : 내가 VS2015의 64에

std::unique_ptr<grpc::Server> m_server; 
//grpc::Server* m_server; 

1> libeay32.lib (rand_win.obj)를 컴파일하고 오류 LNK2019 : 확인되지 않은 외부 기호가 __imp_CreateCompatibleBitmap readscreen 기능에 1> libeay32.lib (rand_win.obj를) 참조 : 함수 readscreen에서 참조되는 확인되지 않은 외부 기호 __imp_DeleteObject 1> libeay32.lib (rand_win.obj) : 오류 LNK2019 : 확인되지 않은 외부 기호 __imp_GetDeviceCaps가 함수 읽기 화면에서 참조되었습니다. 1> libeay32.lib (rand_win.obj) : 오류 LNK2019 : 확인되지 않은 외부 기호 기능 readscreen에서 참조되는 __imp_GetDIBits 1> libeay32.lib (rand_win.obj) : 오류 LNK2019 : 해결되지 않은 외부 기호 __imp_GetObject W는 내가 선언을 반대하는 경우

이 오류가 사라 기능 readscreen에서 참조

//std::unique_ptr<grpc::Server> m_server; 
grpc::Server* m_server; 

========== 빌드 : 1 0 0 업에 실패, 성공 -date, 0 skipped ==========

또한 이상한 점은 오류 자체입니다. 이러한 오류는 gRPC 빌드 내에서 발생합니다. 내가 정적 라이브러리에 링크, 그래서 분명히 다른 lib에 링크를 놓칠 수 있습니다 (unique_ptr 일이 의미가있는 것으로 밝혀지면) -하지만 gRPC가 getDIBits를 호출하는 이유를 상상할 수 없었습니다. 이것은 어떤 의미가 있습니까? (참고 - 나는 소스 코드를 읽지 않고 그냥 이상하게 보입니다). 내가 연결 한 라이브러리가 서로 혼동을 일으킬 가능성이 있습니까? 이름/fn 정의 또는 다른 것 사이의 충돌로 가능합니까?

답변

1

왜 unique_ptr이 원시 포인터와 다른 결과를 제공합니까? 왜냐하면 unique_ptr 전문화에는 원시 포인터가 아닌 grpc :: ~ Server 소멸자에 대한 호출이 포함되어 있기 때문입니다. 링커는 사용하지 않는 파일 (또는 단일 함수)을 바이너리에서 삭제할 수 있으므로 소멸자가 미해결 참조를 호출하면 소멸자가 최적화 된 경우에는 나타나지 않을 수 있습니다. 이러한 GDI 호출의 출처는 어디입니까? 실제 오류는 OpenSSl에서옵니다. 내 생각 엔 gRPC는 https 액세스를 위해 openssl을 사용하고, openssl은 차례대로 screengrabs를 사용하여 임의성을 생성합니다. 편집 : 나는이 설명이 당면한 문제에 도움이되지 않는다는 것을 깨달았다. 그래서, 당신은 단지 gdi32.dll과 연결해야한다고 고쳐야합니다.

+0

간단한 설명과 쉬운 수정. 내가 가장 좋아하는 - 고마워! – FrozenKiwi