我最近用 C 语言制作了一个小型库,我想将其与标准库放在一起,这样我就不必总是为每个新项目复制文件。 我必须把它放在哪里,这样我才能像标准库一样导入它?
编译器 : MinGW
OS: 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
)。