我必须使用用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/