[英]I'm a student and I can't run program in C (visual studio), when I include a library like stdio.h
[英]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::Blocks或Visual 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.