2013-04-24 64 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中?你提供的代碼不會給出這個特定的錯誤。 – 2013-04-24 03:37:23

+0

它是實際情況的簡化版本。但是,問題現在已經解決了。我在這裏發佈的代碼是*正確的* – GuLearn 2013-04-24 04:18:00

回答

1

我強烈懷疑你正在使用* nix鏈接器,並且你列出了目標文件(到編譯器/鏈接爲client.o,然後lib.so。但不幸的是,當鏈接器看到client.o時,它已經可以看到沒有對C::bar的引用,並且不會爲其發送任何代碼。

您需要使用對象組,或者在鏈接命令行上的庫之後的之前兩次列出client.o兩次。