![](/img/trans.png)
[英]How do I create a static library in Rust to link with C code in Windows?
[英]How do I create a library in C?
我正在开发一个使用 libgit2 的程序。 我将代码保存在一个 c 文件中。 说:
somefile.c
我编译并使用它。 现在我想将与libgit2相关的一些细节分离到项目内部的一个单独的库中。 所以我创建了一个 h 文件,其中包含我需要的数据结构和我想要使用的函数的定义。 到目前为止,没有什么特别的:初始化东西,传递到 repo 的路径和 sa treeish ......那些是 const * 常量......然后在库 c 文件中,我在.h文件中实现了函数。
目前,布局是这样的:
include/mylib.c
include/mylib.h
somefile.c
在include/mylib.h
我有一个结构和几个函数:
struct blah {} blah_info;
int blah_init(cont char * path, const char * treeish);
int blah_shutdown();
在 include/mylib.c 我包括 mylib.h:
#include "mylib.h" # notice that I don't have to use "include" in the path
然后我有我放在 .h 文件中的 2 个函数的定义。
在somefile.c
现在我包含库c文件,而不是 .h 文件(并且不再需要包含 git2.h ,因为现在在 mylib 文件中完成了)。
#include "include/mylib.c"
这允许我编译和运行程序,就像在我将它分成几部分之前所做的那样,但我知道可以从 original.c 文件中包含include/mylib.h
。 我认为它需要在编译最终程序之前构建库? 为此需要哪些步骤?
现在我正在手动编译一个 shell 脚本,一次调用 GCC ......所以如果我需要运行更多命令来执行此操作,请告诉我,以便我将它们添加到脚本中。
在somefile.c
中,您需要这样做:
#include "include/mylib.h"
并确保在mylib.c
中定义这些函数:
int blah_init(cont char * path, const char * treeish) {
}
int blah_shutdown() {
}
然后在mylib.h
中声明它们:
struct blah {} blah_info;
int blah_init(cont char * path, const char * treeish);
int blah_shutdown();
当你编译时,将somefile.c
和mylib.c
作为输入文件。
#include 指令用于在其他地方插入文件的内容,它主要用于包含头文件,以便编译器知道什么是什么(类型、常量等),然后 linker 将所有编译文件放入一个可执行文件中。 为确保 header 仅包含一次到您使用称为条件编译的单个文件中,它是使用预处理器完成的(在编译之前)
你的lib.h
#ifndef YOUR_LIB_H_ //there are many naming conventions but I prefer this one
#define YOUR_LIB_H_
//all your declarations go here
#endif //YOUR_LIB_H_
//you should put in comment what's that condition for after every endif
现在在 yourlib.c 你包括那个 header 然后写你的定义
#include "yourlib.h"
//all your definitions go here
和你的主文件一样,只包括 header 和编译器知道该怎么做
#include "yourlib.h"
//your code goes here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.