2013-01-21 32 views
2

我有2子項目(Sub1的和分公司2)項目:Qt Creator的好好嘗試一下鏈接

ESI 
| 
|__Sub1 
| 
|__Sub2 

在一類在分公司2(demo1.cpp)項目實施文件(的.cpp)我包含一個Sub1項目的需求。所以在我聲明的demo1.cpp中:

#include "../sub1/controller.h" 

爲什麼鏈接程序找不到控制器的構造函數? (說未定義參考)

感謝

回答

2

#include告訴編譯哪裏能找到你controller類的定義(即你的controller.h文件的內容)。

爲了鏈接到controller類的實現,鏈接器需要一個包含已編譯實現的庫。 - Sub2項目不會再編譯Sub1的內容,除非您在Sub2項目中包含.cpp文件Sub1,這將是不好的做法,並可能導致更多的問題。


假設Sub1是將作爲sub1.lib生成庫:

您需要將以下幾行添加到您的.pro文件的Sub2項目:

LIBS += -L../Sub1 \ 
     -lsub1 

這告訴鏈接有一個包含庫的「../Sub1」目錄,並且有一個名爲「sub1.lib」的庫。使用-L-l語法的優點是,它適用於所有平臺(Windows,Linux,Mac等)。


如果同時Sub1Sub2是可執行文件(即項目產生.exe)文件,你需要共同的內容提取到具有TEMPLATE = lib而不是TEMPLATE = app在其.pro文件一個單獨的項目Sub3

相關問題