1

我必须使用用 C 编写的https://github.com/google/gumbo-parser库。

我有一个HtmlParser在中定义的类,HtmlParser.h我在其中实现了它的方法HtmlParser.cpp

我包含gumbo.hHtmlParser.h调用它的函数,由我实现的getLinks(...)函数在HtmlParser.cpp

当我尝试编译它时,我得到了对“gumbo_parse”的未定义引用 我该如何修复它?

我的makefile是

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是链接时的错误。这意味着您正在使用的符号(函数)以及在编译编译单元时为其找到定义的符号(函数)无法在链接时解析以进行链接。

如果你只构建一个命令,你可能只需要在-lgumbo你的命令行中添加一个,-L<path to directory containing libgumbo.so>如果它不在默认的库路径中。通常:

g++ main.cc -lgumbo

或者如果 gumbo lib 和 headers 在 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(我现在看到你正在使用),你必须告诉你正在使用gumbo库。这应该使用find_library来完成:

find_library(gumbo)

如果不支持,您可能需要使用link_directories来指定在哪里可以找到它。然后用于target_link_libraries指定与此库链接以供您的目标使用。

于 2016-03-16T13:52:19.697 回答