[英]Call C function in C++ class implementation
我必须使用用C编写的https://github.com/google/gumbo-parser库。
我有一个HtmlParser
这是在定义的类HtmlParser.h
,我实现它的方法HtmlParser.cpp
我在HtmlParser.h
包含gumbo.h
, HtmlParser.h
其为由我实现的函数,该函数是HtmlParser.cpp
getLinks(...)
函数
当我尝试对其进行编译时,会得到未定义的“ 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和标头位于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
指定要与此目标库链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.