1. 程式人生 > 其它 >g++連結報collect2 error ld returned 1 exit status錯誤

g++連結報collect2 error ld returned 1 exit status錯誤

一個晚上都沒有解決這個bug,問了個同學才知道。

模板程式設計時,如果分離編譯會造成連結出錯,報collect2 error ld returned 1 exit status錯誤。

解決方案:

1. 實現寫到.h檔案中,當然這樣可能會造成可執行程式過大;

2. 在模板實現檔案中例項化一份別的cpp需要用到的模板例項。

 

原因:

連結器去別的.o檔案找實現,模板實現類沒有例項化的程式碼,比如你需要A<int>,而模板實現類.o檔案中找不到A<int>的函式入口,所以出錯。

 

具現(instantiations):表示程式將真正的型別和表示式繫結到模板相關形式引數上的操作。也叫做例項化。

在C++中。編譯器在看到模板的定義的時候。並不馬上產生程式碼,僅僅有在看到用到模板時,比方呼叫了模板函式 或者 定義了類模板的

物件的時候。編譯器才產生特定型別的程式碼。

 

Appendix:

普通的連結出錯一般就是找不到實現,或者漏掉了需要連結的目標檔案或動態、靜態連結庫,查詢一下即可。

在C++中。編譯器在看到模板的定義的時候。並不馬上產生程式碼,僅僅有在看到用到模板時,比方呼叫了模板函式 或者 定義了類模板的

物件的時候。編譯器才產生特定型別的程式碼。