2014-11-22 3 views
-1

나는 내 프로그램과 함께 갈 dll을 C++로 빌드하려고합니다. dll은 일련의 상속 가능한 클래스 및 일반 유틸리티가있는 기본 라이브러리가 될 것이며 최종 제품 (A Game)과 함께 제공 될 여러 다른 응용 프로그램에 의해 동적으로 사용될 수 있습니다. 나는 뭔가를 던져 버렸고, 내가 잘못을 저주했다는 것을 알기 위해서만. 그것은 유명한 "오류 LNK2019 : 해결되지 않은 외부 기호"입니다. 첫째로, 나는 이미 이것에 해결책을 찾아 내고, 연결은 여기에서있다 : Unresolved External Symbol- Error in guide?불쾌한 DLL 문제 (해결되지 않은 외부 기호)

선정 된 대답은 작동한다. 클래스를 헤더 파일에만 넣으면 완벽하게 컴파일되고 실행되며 멋지고 예쁘다. 그러나 선언과 구현을 별도로 유지하고 구현을 개별 cpp로 옮기려고하면 LNK2019 오류가 발생합니다. 이것은 어떤 종류의 인라인 때문입니다. 머리카락을 찢기 시작하기 전에 어떻게 고칠 수 있는지 알고 싶습니다.

아무도 도와 줄 수 있습니까?

헤더 :

#ifndef MYDLLTESTCLASS_H 
#define MYDLLTESTCLASS_H 
class __declspec(dllexport) MyDLLTestClass { 
    public: 
    MyDLLTestClass(); 
    void setX(int x); 
    int getX(); 
    private: 
    int x; 
}; 
#endif // MYDLLTESTCLASS_H 

CPP : 여기 내 클래스입니다 위의 같은

#include "MyDLLTestClass.h" 

MyDLLTestClass::MyDLLTestClass() { 

} 

void MyDLLTestClass::setX(int x) { 
    this->x = x; 
} 

int MyDLLTestClass::getX() { 
    return x; 
} 

구분이 코드는 늘 컴파일합니다. 그러나 선언과 구현을 함께 던지면 작동합니다. 이렇게하면 :

작동합니다. 다시 말하지만, 나는 선언과 구현을 분리하여 원한다.

다음은 별도의 선언 및 구현을 사용할 때 빌드 보고서입니다.

http://pastebin.com/HMEpeEgn

+0

어떤 상징이 해결되지 않은 (당신이 마음을 작동하지 않았다 또한) 묘사하려고 시도하지 않았다? –

+0

@JonathanPotter 제 코멘트가 어떻게 든 삭제 된 것 같아요 ... 당신이 볼 수있는 게시물 하단에 빌드 출력에 대한 링크를 추가했습니다. – Krythic

+1

문제는 헤더 파일의 클래스에있는 declspec입니다. 조건부로 DLL의 * consumers *에'__declspec (dllimport)'를 사용하지 마십시오. 기본 DLL 프로젝트에서이 문제를 처리 할 매크로를 선언하는 이유가 있습니다. 오류 로그에 DLL을 연결하는 데 문제가 없습니다. 심볼을 찾을 수없는 것은 * 클라이언트 *입니다. – WhozCraig

답변

0

이 실제로 내가 실현보다 해결하는 것이 훨씬 쉬웠다; 그것은 그것이 비주얼 스튜디오 설정이었던 것으로 밝혀졌습니다. 먼저 dll 프로젝트를 현재 프로젝트에 추가해야합니다 (현재 프로젝트를 사용할 것입니다).

enter image description here

을 그리고 (광산은 단순히 확인 표시를 실종됐다) 체크 표시해야 만 할 수 귀하의 DLL을 추가 : 그럼 당신은이 두 사진을 바로 당신의 현재 프로젝트를 클릭하고 수행 할 필요가있다.

enter image description here

그 후 프로젝트는 완벽하게 정상적으로 컴파일! 모든 웹 페이지와 같은 불쾌한 엉덩이 #ifndef 매크로에 대한 필요가

관련 문제