繁体   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