2013-04-24 2 views
0

는이 같은 클래스와 공유 라이브러리를 쓴 :공유 라이브러리

// lib.h 
class LibClass { 
    template<typename T> 
    static void foo() { 
     T *tmp = new T(); 
     tmp->bar(); 
    } 
}; 

그리고 정의 클래스와 다른 곳에서 lib 디렉토리를 사용 : 내가 가진

//client.cpp 
class C { 
public: 
    void bar() { cout<<"bar"<<endl; } 
}; 

int main() { 
    LibClass::foo<C>(); 
    return 0; 
} 

오류 undefined reference to 'C::bar()'

+1

lib.h 및 client.cpp에있는 내용은 정확히 * 무엇입니까? 당신이 제시 한 코드는 그 하나의 특정한 오류를주지 않을 것입니다. –

+0

실제 상황을 단순화 한 버전입니다. 그러나 문제는 지금 해결되었습니다. 여기에 게시 된 코드는 * 올바른 * – GuLearn

답변

1

당신이 * nix 링커를 사용하고 있다고 생각하고, 컴파일러에/client.o, 그 다음으로 링크 된3210. 그러나 불행히도 링커가 client.o를 볼 때 이미 C::bar에 대한 참조가없고이를위한 코드를 내 보내지 않는다는 것을 알 수 있습니다.

개체 그룹을 사용하거나 client.o 두 번, 둘 모두를 앞에 두어야합니다. 링크 명령 행에서 라이브러리를 사용한 후입니다.