2009-10-14 2 views
0

다른 동적 라이브러리 (종속성)를 사용하는 동적 라이브러리 (플러그인)가 있습니다. 나는 의존성을 두 가지 방식으로 사용한다 : a. 종속성에 정의 된 클래스에서 객체를 인스턴스화하여 b. 종속성에 정의 된 클래스에서 상속 받음링크 오류 : 누락 된 심볼이지만 기호가 내보내기되었습니다 (exp 및 lib)

.을 수행하면 연결 오류가 없습니다. 그러나 b. 할 때, 나는 몇몇 상징 (LNK2001)을 놓치고 있다는 연결 오류가있다. .lib/.exp에서 정확한 맹 글링 된 이름을 찾고 MSVC (2005)가 누락되었다고 말한 기호를 찾았습니다.

내가 Qt를 사용하고 있으며 누락 된 기호가 moc 파일 (부모 클래스의 staticMetaObject)에서 자동으로 생성되는 기호라는 것이 중요 할 수 있습니다. 또한 디버그 및 릴리스에서 이러한 오류가 발생한다는 것을 의미 할 수도 있습니다. 즉, "OPT : NOREF/OPT : NOICF"를 시도해 보았습니다. 심볼이 lib 파일에 있음 ...)

심볼이 있음에도 불구하고이 링크 오류가 발생할 수 있습니까? 가장 중요한 것은 이러한 오류를 어떻게 해결할 수 있습니까?

도움 주셔서 감사합니다.

답변

1

__declspec(dllexport) (빌드 할 때) 및 __declspec(dllimport) (연결할 때)으로 클래스를 선언하고 싶을 수 있습니다.

this link을 참조하십시오.

+0

좋아, 이제 나는 어리 석다. import 매크로가 __declspec (dllimport가 아니라)가 아닌 것으로 정의 된 것이 사실입니다. 나는 왜 그것이 a에서 작동하는지 이해하지 못한다. 그러나 경우 b. 즉, 왜 직접 파생 된 클래스를 가져와야하지만 직접 사용하지 않는 클래스를 가져와야합니까? – Geeho

+0

위의 링크를 기반으로하는 내 추측은 여전히 ​​일부 메소드를 호출 할 수 있습니다 (예 : 헤더에 인라인으로 선언되었거나 가상 인 경우). 두 번째로 컴파일러/링커가 필요하지 않은 메소드가 두 번째입니다. 손에 가지고 있다면 오류가 발생합니다. – asveikau

관련 문제