2017-08-10 49 views
0

像Boost這樣爲函數和數據結構提供C++模板的庫可通過.so文件提供。我讀過.so文件包含只需要在運行時加載到內存中的機器代碼。.so文件中的C++模板化函數

在我看來,機器指令也必須有某種形式的模板機制來支持這樣的庫,我懷疑是否存在。

任何人都可以解釋如何將這些庫編譯並鏈接爲模板嗎?

回答

3

任何人都可以解釋如何將這些庫編譯和鏈接爲模板嗎?

模板化的代碼不能從二進制文件中導出,但是沒有模板化(例如在基類,輔助函數等中使用)。

像boost這樣的庫不僅僅包含頭文件中提供的模板類和函數,還包含可以二進制形式分發的部分。後者是什麼形成.so文件。

+0

感謝您的回答!但是,當一個模板用一個類型實例化時,編譯器如何找出結果類或函數的代碼?它是否需要源代碼模板的定義才能做到這一點?我不確定Ubuntu中的'libboost-all-dev'軟件包是否也有源碼。 – kesari