这很尴尬,但直到现在我总是将* .h和* .c文件复制到我的projekts位置。这是一团糟,我想改变它!
我想建立自己的c库,并对此有一些疑问。
我应该在哪里找到* .h文件?
我应该在全局/ usr / include /文件夹中复制它们,还是应该在$ HOME(或其他任何地方)创建我自己的文件夹?
我应该在哪里找到* .a文件和* .o文件以及* .c文件。
我正在使用debian和gcc。我的c项目在$ HOME / dev / c /.
我会将我的lib-sources保存在$ HOME / dev / c / lib中(如果这是你推荐的方式)并将* .o,* .a和* .h文件复制到我要求的位置对
如何将lib-location引入编译器?我应该将它添加到$ PATH,还是应该在我的projekt的makefile中引入它(比如-L PATH / TO / LIBRARY -l LIBRARY)。
您是否还有建立自己的图书馆的进一步提示和技巧?
答案 0 :(得分:5)
我建议将文件放在$HOME
目录中的某个位置。我们假设您已创建了一个名为linluk
的库,并希望将该库保留在$HOME/dev/c/linluk
下。那将是你的项目根目录。
您需要一个合理的目录结构。我的建议是有一个包含你的库的lib
目录和一个包含头文件的include
目录。
$PROJECT_ROOT/
lib/
liblinluk.so
include/
linluk.h
src/
linluk.c
Makefile
正在编译:如果要在其他项目中使用此库,则需要将-I$PROJECT_ROOT/include
添加到编译行,以便您可以编写#include <linluk.h>
源文件。
链接:您可以将-L$PROJECT_ROOT/lib -llinluk
添加到链接器命令行,以便在链接时提取已编译的库。确保您的.so
文件具有lib
前缀:它应该是liblinluk.so
,而不是linluk.so
。
src
目录和Makefile
是可选的。库的用户不需要源代码,但如果有人想重新制作.so
文件,可能会有帮助。
答案 1 :(得分:2)
正如我评论的那样,您应该首先尝试从其源代码构建和安装几个免费软件库,例如:例如libonion或gdbm或GNU readline等(不要使用任何分发包,而是从源代码编译和安装这些包)。这将教你一些好的做法。
您可能希望安装这些系统范围的库,而不是您的特定用户。然后,假设您的库被称为foo
(您需要给它一些名字!),
标题文件*.h
进入/usr/local/include/foo/
共享对象(动态库)进入/usr/local/lib/libfoo.so
(可能有一些版本编号)
如果相关,静态库会进入/usr/local/lib/libfoo.a
您需要将/usr/local/lib/
添加到/etc/ld.so.conf
并运行ldconfig(8)
并且您不想复制任何源文件*.c
或目标文件*.o
阅读Program Library HowTo(后来,Drepper的论文:How To Write Shared Libraries)
您可以考虑让pkg-config知道您的图书馆。然后在foo.pc
/usr/local/lib/pkgconfig/
顺便说一句,我强烈建议您将您的图书馆发布为free software,可能在github或其他地方。您将获得有用的反馈,并可以获得一些帮助以及一些错误报告或增强功能。
您可能应该使用make
之类的构建器,并在install
中设置Makefile
目标(提示:使其使用DESTDIR
约定。)