近日對岸瞎鬧擾民添堵。深圳灣檢閱震懾宵小之輩。
工作還得繼續,這不整合別人提供的乙個dll專案也懵了一下。
配置好環境後編譯,竟然沒有生成dll對應的匯入lib(便於別的專案引用開發)
我們知道(網上資料)要對vc的動態庫專案支援匯出不外乎2種方式。
回顧一下
1)方式一:
在匯出的標頭檔案中使用 _declspec(dllexport) 來約定匯出函式或類。如下***.h
#ifdef _windll
// 根據巨集來判斷是匯出庫
#define myapi _declspec(dllexport)
#else
// 這是第3方應用使用時要指定
#define myapi _declspec(dllimport)
#endif
// 該方法暴露給第3方呼叫
myapi void test(int x);
當然對應的cpp檔案中對test方法進行了實現。如果匯出c風格的。則要增加 extern "c" 。如
#ifdef win32project1_exports
#define myapi extern "c" __declspec(dllexport)
#else
#define myapi extern "c" __declspec(dllimport)
#endif
2)方式二:
使用def檔案來定義匯出的函式。專案建立乙個類似myapi.def的檔案。內容大概如下
library dllname
exports
test
test2
然後配置專案屬性,聯結器屬性
這個是老生常談的內容了。 大家已經知道了。
這個朋友的提供的專案用的是方式一,簡單看了也是按這樣實現的。編譯正常,dll輸出了。
那麼為什麼沒有生成lib庫呢?看起來沒有問題啊。
難道是vc環境的問題?
難道是專案配置問題?
一番折騰對比研究(因為不喜歡def的方式,且該方式不支援c風格的匯出庫)。竟然還是**的問題。
***.cpp檔案裡面竟然引用了一些標頭檔案,獨沒有引用***.h。而編譯卻一切正常。
究其原因是***.cpp檔案中,實現的方法引數型別已經在其他標頭檔案中定義了,實現的方法體也沒有加上myapi(名稱自定)巨集。所以編譯不會報錯。導致怎麼檢查也沒有發現是因為缺少標頭檔案的問題。
最後加上對應的***.h標頭檔案後,終於可以生成lib了。此事告一段落。
只有一次 只有一次
二十多歲的年紀我累了很久,也在努力的尋找機會向陽而生。十三歲時迫於生活父母把剛上初一的我獨自留在老家,被父母伺候慣的我沒有一點生活常識,不懂得如何把衣服洗淨,不懂得如何生火做飯,不懂得如何花錢,不懂得如何戰勝黑暗和孤獨,每次乙個人回家時都會出現幻聽和幻覺,看著家裡好像有炊煙,聽誰都像媽媽的聲音.好不...
只有一次 生命,只有一次
生命,每個人只有一次,或長或短 生活,每個人都在繼續,或悲或歡 人生,每個人都在旅途,或起或伏。人無完人,事無完美,有些小人,你不須計較,計較會煩 有些繁事,你不必在意,在意會累。活著就是勝利,掙錢只是遊戲,健康才是目的,快樂更是真諦!百年之後,你睡你的,我睡我的,再美麗的語言也無法跟你溝通,因為我...
VS生成DLL沒有生成LIB檔案的解決方法
1 在所建工程上單擊滑鼠右鍵,在彈出的右鍵選單中選擇 新增 新建項.模組定義檔案 在該模組定義檔案中寫匯出函式表,單擊確定。然後在所建工程上單擊滑鼠右鍵,選擇 屬性 選單,在彈出的屬性對話方塊中 鏈結器 輸入 模組定義檔案 中填寫剛才定義的def檔案,然後再重新編譯即可生成lib檔案。2 新建 wi...