[英]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.