1

C で書かれたhttps://github.com/google/gumbo-parserライブラリを使用する必要があります。

HtmlParserで定義されているクラスがあり、そのHtmlParser.hメソッドを実装していますHtmlParser.cpp

私がインクルードgumbo.hして、その関数HtmlParser.hを呼び出しますgetLinks(...)HtmlParser.cpp

コンパイルしようとすると、「gumbo_parse」への未定義の参照が表示され ます。どうすれば修正できますか?

私のメイクファイルは

cmake_minimum_required(VERSION 3.3)
project(WebCrawler)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp HtmlParser.cpp HtmlParser.h)
add_executable(WebCrawler ${SOURCE_FILES})
4

1 に答える 1

5

これundefined referenceはリンク時のエラーです。これは、使用していて、コンパイル単位のコンパイル時に定義が見つかったシンボル (関数) が、リンク時に解決できないことを意味します。

1 つのコマンドだけでビルドする場合は、おそらく-lgumboコマンド ラインに a を追加するだけで済みます。最終的に-L<path to directory containing libgumbo.so>、それがデフォルトの lib パスにない場合は、通常:

g++ main.cc -lgumbo

または、gumbo lib とヘッダーが gumbo サブディレクトリにある場合:

g++ main.cc -I/usr/local/include/gumbo/ -L/usr/local/lib/gumbo/ -lgumbo

複数のコマンド ラインでビルドする場合 (最初にオブジェクトをビルドし、次にそれらをリンクする場合、リンク コマンドにオプション-l(および最終的には) を追加する必要があります。-L

g++ main.cc -o main.o # This is the objects building command
g++ main.o -l gumbo   # This is the linking command

編集:(あなたcmakeが使用していることがわかった)で、ガンボライブラリを使用していることを伝える必要があります。これは、find_libraryを使用して行う必要があります。

find_library(gumbo)

サポートされていない場合は、 を使用link_directoriesして検索場所を指定する必要がある場合があります。次に、使用target_link_librariesして、ターゲットに対してこのライブラリとリンクするように指定します。

于 2016-03-16T13:52:19.697 に答える