簡體   English   中英

我怎樣才能像 stdio 一樣使用我的 C 庫

[英]How can I use my C library as others like stdio

我最近在 C 做了一個小庫,我想把它和標准庫放在一起,這樣我就不必總是為每個新項目復制文件。 我必須把它放在哪里才能像標准庫一樣導入它?

編譯器:MinGW
操作系統:Windows

你需要創建一個庫,但你不一定需要把它和 MinGW 的標准庫放在同一個地方(實際上我認為這是一個壞主意)。

最好將您自己的庫/庫放在特定位置,然后使用-I編譯器標志告訴編譯器在哪里可以找到頭文件( .h.hpp.hh )和-L鏈接器標志告訴鏈接器在哪里可以找到庫檔案( .a.dll.a )。 如果您有.dll文件,則應在運行.exe時確保它們位於PATH環境變量中,或者確保將.dll文件復制到與.exe相同的文件夾中。

如果您使用 IDE(例如Code::BlocksVisual Studio Code ),您可以在全局 IDE 編譯器/鏈接器設置中設置這些標志,這樣您就不必為每個新項目添加標志。

然后,在構建使用您的庫的項目時,您需要將帶有庫名稱的-l標志添加到鏈接器標志中,但沒有 lib 前綴和擴展名(例如,使用libmystuff.a / libmystuff.dll.a指定鏈接器標志-lmystuff )。 -static標志的使用將告訴鏈接器使用靜態庫而不是共享庫(如果兩者都可用)。

我在https://github.com/brechtsanders/ci-test創建了一個最小的示例庫,以說明如何創建一個可以在 Windows 上構建為靜態和共享 (DLL) 庫的庫,但同樣的代碼也在 macOS 和 Linux 上編譯。

如果您不使用 Make 或 CMake 之類的構建工具,並且想要手動執行這些步驟,那么靜態庫將如下所示:

gcc -c -o mystuff.o mystuff.c
ar cr libmystuff.a mystuff.c

要以二進制形式分發庫,您應該分發頭文件 ( .h ) 和庫存檔文件 ( .a )。

這是一個來自Makefile的示例:

創建庫

@clang -c $(LIBRARY_COMPILER_FLAGS) $(LIBRARY_DEFINES) $(LIBRARY_INCLUDE_PATHS) $(LIBRARY_SOURCES)
@ar rcs $(LIBRARY) *.o

鏈接庫

@clang -c $(APPLICATION_COMPILER_FLAGS) $(APPLICATION_DEFINES) $(APPLICATION_INCLUDE_PATHS) $(APPLICATION_SOURCES)
@clang *.o -o $(EXECUTABLE) $(LIBRARY)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM