繁体   English   中英

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

[英]Call C function in C++ class implementation

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

我有一个HtmlParser这是在定义的类HtmlParser.h ,我实现它的方法HtmlParser.cpp

我在HtmlParser.h包含gumbo.hHtmlParser.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM