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をライブラリworking-typeに読み取り、 MMIOT docmarkdown()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の構成ツールを実行しました。デフォルトは静的ライブラリですが、同じ問題が発生します。

4

1 に答える 1

2

代わりにこれを試してください:

gcc -Wall -o FILE FILE.c -lmarkdown

の配置は-l、多くのリンカーが、解析時に存在する場合にのみ、未解決の参照を満たすためにライブラリを使用するという点で重要です。-lこれにより、たとえば循環依存に関するあらゆる種類の問題が発生する可能性があります。

元々持っていた場所では、まだコンパイルしていないので、これらの関数は未解決ではありませんFILE.c。あなたコンパイルするとき、参照を満たすためにその点に続くことFILE.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 に答える