在 C++ class 实现中调用 C 函数
Call C function in C++ class implementation
我必须使用 https://github.com/google/gumbo-parser 用 C 编写的库。
我有一个在 HtmlParser.h
中定义的 HtmlParser
class,我在 HtmlParser.cpp
中实现了它的方法
我在 HtmlParser.h
中包含 gumbo.h
并在 HtmlParser.cpp
中调用由我实现的 getLinks(...)
函数中的函数
当我尝试编译它时,我得到 undefined reference to '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
是 link 时的错误。这意味着您正在使用的符号(函数)以及在编译编译单元时找到定义的符号(函数)无法在 link 时解析为 link 反对。
如果你只构建一个命令,你可能只需要在你的命令行中添加一个 -lgumbo
,如果它不在默认的 lib 路径中,最后添加 -L<path to directory containing libgumbo.so>
。通常:
g++ main.cc -lgumbo
或者如果 gumbo lib 和 headers 在 gumbo 子目录中:
g++ main.cc -I/usr/local/include/gumbo/ -L/usr/local/lib/gumbo/ -lgumbo
如果您构建多个命令行(首先构建 objects,然后 linking 它们,那么您需要添加 -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
编辑: 使用 cmake
(我现在看到您正在使用),您必须说明您正在使用 gumbo 库。这应该使用 find_library:
来完成
find_library(gumbo)
如果不支持,您可能需要使用 link_directories
to specify where to find it. Then use target_link_libraries
将此库指定为 link 作为您的目标。
我必须使用 https://github.com/google/gumbo-parser 用 C 编写的库。
我有一个在 HtmlParser.h
中定义的 HtmlParser
class,我在 HtmlParser.cpp
我在 HtmlParser.h
中包含 gumbo.h
并在 HtmlParser.cpp
getLinks(...)
函数中的函数
当我尝试编译它时,我得到 undefined reference to '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
是 link 时的错误。这意味着您正在使用的符号(函数)以及在编译编译单元时找到定义的符号(函数)无法在 link 时解析为 link 反对。
如果你只构建一个命令,你可能只需要在你的命令行中添加一个 -lgumbo
,如果它不在默认的 lib 路径中,最后添加 -L<path to directory containing libgumbo.so>
。通常:
g++ main.cc -lgumbo
或者如果 gumbo lib 和 headers 在 gumbo 子目录中:
g++ main.cc -I/usr/local/include/gumbo/ -L/usr/local/lib/gumbo/ -lgumbo
如果您构建多个命令行(首先构建 objects,然后 linking 它们,那么您需要添加 -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
编辑: 使用 cmake
(我现在看到您正在使用),您必须说明您正在使用 gumbo 库。这应该使用 find_library:
find_library(gumbo)
如果不支持,您可能需要使用 link_directories
to specify where to find it. Then use target_link_libraries
将此库指定为 link 作为您的目标。