在C++类实现中调用C函数

Vit*_*nov 1 c++ cmake gumbo clion

我必须使用用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})
Run Code Online (Sandbox Code Playgroud)

Col*_*rat 5

undefined reference是在链接时出现错误.这意味着您正在使用的符号(函数)以及在编译单元时找到定义时无法在链接时解析链接.

如果只构建一个命令,那么您可能只需要-lgumbo在命令行中添加一个命令行,-L<path to directory containing libgumbo.so>如果它不在默认的lib路径中.典型:

g++ main.cc -lgumbo
Run Code Online (Sandbox Code Playgroud)

或者如果gumbo lib和header在gumbo子目录中:

g++ main.cc -I/usr/local/include/gumbo/ -L/usr/local/lib/gumbo/ -lgumbo
Run Code Online (Sandbox Code Playgroud)

如果您构建多个命令行(首先构建对象,然后链接它们,那么您需要将-l(并最终-L)选项添加到link命令:

g++ main.cc -o main.o # This is the objects building command
g++ main.o -l gumbo   # This is the linking command
Run Code Online (Sandbox Code Playgroud)

编辑:cmake(我现在看到你正在使用),你必须告诉你正在使用gumbo库.这应该使用find_library来完成:

find_library(gumbo)
Run Code Online (Sandbox Code Playgroud)

如果不支持,您可能需要使用它link_directories来指定查找位置.然后使用target_link_libraries指定链接到此库的目标.