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

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

我将gumbo.h包括在HtmlParser.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})

最佳答案

undefined reference在链接时出错。这意味着在链接时无法解析正在使用的符号(功能),并且在编译编译单元时已找到其定义的符号(功能)。

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

g++ main.cc -lgumbo

或gumbo lib和 header 位于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 为您的目标指定与此库链接。

关于c++ - 在C++类实现中调用C函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36037387/

10-12 21:21