如何在 C 中导出用户定义的库
How to Export User Defined Library in C
我创建了一个相当大的库:
DataStructures.h :
Stack.h :
Stack.c
LinkedList.h :
LinkedList.c
HashTable.h :
HashTable.c
etc...
我如何导出这个库以便其他人可以使用它们?他们是否必须 link .c 连同他们的 main?
您需要将您的 .c 文件编译成库并将库和 header 一起分发。
图书馆有两种类型;动态(在 Linux 上以 .so
结尾)和静态(在 Linux 上以 .a
结尾)。
我相信 Windows 上的静态库以 .lib 结尾,那里的动态库以 .dll 结尾,但我不是 windows 开发人员。
Mac 可以同时拥有 .so
和 .dylib
文件,具体取决于您的工具链。
在 Linux 上,制作静态库的一般方法是使用工具 ar
和 ranlib
。假设您的 Makefile 有一个名为 OBJS 的 object 个文件列表,
mylibrary.a: $(OBJS)
ar -ru $@ $(OBJS)
ranlib $@
创建共享库类似,但通常使用 gcc -shared
而不是 ar
和 ranlib
,并且必须为 [= 编译 object 文件37=],即添加 -fPIC
到您的 CFLAGS。
获得库和 header 文件后,将 header 放在名为 "include" 的目录中,将库放在名为 "lib" 的目录中。将这两个目录归档(例如使用 tar 或 zip)并将它们发送给任何使用它们的人。
请注意,他们需要与您相同类型的计算机、操作系统版本、编译器等。这就是 C 库代码最常以源代码格式共享的原因。
我创建了一个相当大的库:
DataStructures.h :
Stack.h :
Stack.c
LinkedList.h :
LinkedList.c
HashTable.h :
HashTable.c
etc...
我如何导出这个库以便其他人可以使用它们?他们是否必须 link .c 连同他们的 main?
您需要将您的 .c 文件编译成库并将库和 header 一起分发。
图书馆有两种类型;动态(在 Linux 上以 .so
结尾)和静态(在 Linux 上以 .a
结尾)。
我相信 Windows 上的静态库以 .lib 结尾,那里的动态库以 .dll 结尾,但我不是 windows 开发人员。
Mac 可以同时拥有 .so
和 .dylib
文件,具体取决于您的工具链。
在 Linux 上,制作静态库的一般方法是使用工具 ar
和 ranlib
。假设您的 Makefile 有一个名为 OBJS 的 object 个文件列表,
mylibrary.a: $(OBJS)
ar -ru $@ $(OBJS)
ranlib $@
创建共享库类似,但通常使用 gcc -shared
而不是 ar
和 ranlib
,并且必须为 [= 编译 object 文件37=],即添加 -fPIC
到您的 CFLAGS。
获得库和 header 文件后,将 header 放在名为 "include" 的目录中,将库放在名为 "lib" 的目录中。将这两个目录归档(例如使用 tar 或 zip)并将它们发送给任何使用它们的人。
请注意,他们需要与您相同类型的计算机、操作系统版本、编译器等。这就是 C 库代码最常以源代码格式共享的原因。