c - 如何编译Discount C库?

标签 c markdown discount

我想使用 Discount要转换的 C 库 Markdown将文本转换为 HTML。我已经成功编译并安装了库(版本 2.1.3)。

我试着编译这段代码

#include <mkdio.h>
int main(void)
{
 FILE *in, *out;
 MMIOT *doc;

 in = fopen("sample.md", "r");
 out = fopen("out.html", "w");

 doc = mdk_in(in, 0);
 markdown(doc, out, 0);

 ...
}

解释:mkd_in()将输入文件in读入库工作类型MMIOT doc并markdown() 应该将 doc 转换为 HTML 并将其写入 out 文件。

使用命令 gcc -Wall -lmarkdown -o FILE FILE.c 我总是得到以下输出:

undefined reference to `mkd_in(_IO_FILE*, unsigned int)'
undefined reference to `markdown(void*, _IO_FILE*, unsigned int)'

注意:我使用--shared选项运行Discount的配置工具来构建动态库。默认是一个静态库,但我遇到了同样的问题。

最佳答案

试试这个:

gcc -Wall -o FILE FILE.c -lmarkdown

-l 的位置很重要,因为许多链接器只会使用库来满足未解析的引用,如果它们存在-l 时已解析。 例如,这可能会导致循环依赖的各种问题。

在您最初拥有它的地方,这些函数并非未解析,因为您尚未编译 FILE.c。当您确实编译FILE.c 时,该点后面没有-l 来满足引用。

来自 gcc 手册页:

Order does matter when you use several options of the same kind; for example, if you specify -L more than once, the directories are searched in the order specified. Also, the placement of the -l option is significant.

然后,在 -l 下:

It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, foo.o -lz bar.o searches library z after file foo.o but before bar.o. If bar.o refers to functions in z, those functions may not be loaded.

关于c - 如何编译Discount C库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10053785/

相关文章:

markdown - 将 phpBB BBCode 帖子转换为 Markdown

php - WooCommerce 中一件免费产品的数量折扣

php - 根据商品数量有条件地按购物车商品添加折扣

c - 为什么这段代码无法执行呢?

Qt之类的C框架?

markdown - 从 Markdown 转换为 Word 时更改字体系列和大小?

php - 向购物车申请 20% 的折扣,上限为上限

c - 字符指针中的段错误

c - 程序的每一行都有自己的地址吗?

npm - @nuxt/content 页面在生产模式下找不到