1

我想使用折扣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)'

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

4

1 回答 1

2

试试这个:

gcc -Wall -o FILE FILE.c -lmarkdown

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

在你最初拥有它的地方,这些函数并不是未解决的,因为你还没有编译FILE.c. 当您执行compileFILE.c时,没有-l遵循该点来满足引用。

gcc手册页:

当您使用多个相同类型的选项时,顺序确实很重要。例如,如果您多次指定 -L,则会按指定的顺序搜索目录。此外,-l 选项的位置也很重要。

并且,后来,在-l

在命令中编写此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,foo.o -lz bar.o 在文件 foo.o 之后但在 bar.o 之前搜索库 z。如果 bar.o 引用 z 中的函数,则可能不会加载这些函数。

于 2012-04-07T10:58:56.577 回答