關於C 動態鏈結庫工程不能編譯出lib的解決辦法

2021-05-01 21:18:38 字數 932 閱讀 6167

在vc6中建立了win32 dynamic-link library工程,建立了自己所需的測試類,結果編譯後,在輸出目錄看不到*.lib。請教了一同事,解決方法如下:  

1、vc++中靜態庫(*.lib)的輸出路徑需要手工修改,位置在project->settings,link->general中project options編輯框中,預設有乙個輸出lib的路徑,就在當前目錄下,將其中的/implib:後的路徑進行修改,如"../../bin/test.lib"

2、手工修改了路徑後,再次編譯工程,仍不見lib的影子。原來是沒有對動態庫進行dllexport。只有對動態庫進行類匯出,才可以在外部訪問相應的類。

3、對動態庫增加匯出功能。動態庫工程建立後,系統會自動增加乙個預編譯的巨集,可以通過project-settings,c/c++的general->preprocessor definitions檢視,命名一般為 工程名_exports。在能訪問到的標頭檔案(*.h)中增加以下匯出動態庫的**:

#ifdef win32

#ifdef 工程名_exports         //以下實現:如果定義了工程名_exports這個巨集,則匯出動態庫,否則匯入動態庫(使用庫時)

#define test_api __declspec(dllexport)     //test_api是自己命名的匯出名稱

#else

#define test_api __declspec(dllimport)     //test_api是自己命名的匯出名稱

#endif

#else

#define test_api

#endif

4、在需要外部訪問的類中增加test_api巨集定義

class test_api ctesta

5、再次編譯,這下就能看到lib,之後就能在其他工程中引入這個動態庫並訪問其中被test_api定義的類了。

linux 編譯靜態鏈結庫和動態鏈結庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在linux中如何建立靜態...

C 動態鏈結庫

動態鏈結庫是實現共享函式庫概念的一種方式。擴充套件名為 dll 動態鏈結庫提供了一種方法,使程序可以呼叫不屬於其可執行 的函式。函式的可執行 位於乙個dll檔案中,該dll包含乙個或多個已被編譯,鏈結並與他們的程序分開儲存的函式。dll有助於共享資料和資源,多個應用程式可同時訪問記憶體中的單個dll...

C 動態鏈結庫

通過動態鏈結庫實現呼叫者不需要重新編譯的情況下被呼叫者的更改可生效 被呼叫者標頭檔案str.h ifndef str h define str h include include using namespace std class myclass a enum b static string fun...