Vit*_*nov 1 c++ cmake gumbo clion
我必须使用用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})
Run Code Online (Sandbox Code Playgroud)
该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指定链接到此库的目标.