一次DLL工程只有dll,沒有生成lib的回溯

2021-09-25 22:21:34 字數 1400 閱讀 5924

近日對岸瞎鬧擾民添堵。深圳灣檢閱震懾宵小之輩。

工作還得繼續,這不整合別人提供的乙個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...