c++庫的編譯和連接使用,確實是巨坑c++
##主要緣由:windows
c++ 大量依賴預編譯選項 和 預編譯宏開關函數
跨平臺庫,有大量的配置須要調整工具
c++的外部依賴不明確,沒有顯式標註debug
windwos的靜態庫和動態庫 有大量的的dllimport dllexport 之類的定義設計
頭文件同時供庫自身和外部使用着同時調用,致使有各類宏的奇技淫巧指針
##從physx庫自己來看:接口
physx被拆分爲多個庫,有的編譯爲靜態庫,有的爲動態庫,庫之間的依賴關係難於直觀看到編譯
windows動態庫連接靜態庫,要求兩個庫有相同的c運行庫,mutlthread debugger dll 之類的選項,不一樣的依賴,致使沒法連接thread
dllimport dllexport 之類的區分 致使c函數名字變化,連接時纔出錯
連接出的dll 的外部依賴,須要第三方工具分析
功能裁剪,須要對代碼進行分析,找到影響功能的宏
致使c++庫修改和編譯很是緩慢,效率很低
#c++設計問題
缺乏模塊概念,頭文件和庫文件分離
動態庫和靜態庫 概念分離,致使使用不便
windows下接口名字會由於 dllexport 而修改
連接依賴關係不明顯
大量濫用預編譯宏
頭文件行爲受到宏影響多變,致使庫和庫使用者之間不一致
head file 頭文件地獄,永遠找不到應該include哪一個頭文件
非指針類型不能向前引用
頭文件不單單是公開API 還包括大量私有實現細節
二進制內部結構一無所知,對編譯出來的 dll沒法清晰的知道,其中究竟包含了什麼內容