我用C语言编写的库的最佳实践

lin*_*luk 1 c linux gcc libraries

这很尴尬,但直到现在我总是将*.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).

你有建立自己的图书馆的进一步提示和技巧吗?

Joh*_*ica 5

我建议将文件放在$HOME目录中的某个位置.假设您已经创建了一个名为的库,linluk并且您希望保留该库$HOME/dev/c/linluk.那将是你的项目根.

你需要一个合理的目录结构.我的建议是有一个lib包含你的库的include目录和一个包含头文件的目录.

$PROJECT_ROOT/
    lib/
        liblinluk.so
    include/
        linluk.h
    src/
        linluk.c
    Makefile
Run Code Online (Sandbox Code Playgroud)

编译:当您想在另一个项目中使用此库时,您将添加-I$PROJECT_ROOT/include到编译行,以便您可以#include <linluk.h>在源文件中写入.

链接:您将添加-L$PROJECT_ROOT/lib -llinluk到链接器命令行以在链接时拉入已编译的库.确保您的.so文件具有该lib前缀:它应该是liblinluk.so,而不是linluk.so.

一个src目录,然后Makefile是可选的.库的用户不需要源代码,但如果有人想要重新创建.so文件,那么将它放在那里可能会有所帮助.