gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:11:31 25 4
gpt4 key购买 nike

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

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

我将 gumbo.h 包含在 HtmlParser.h 中,并在我实现的 getLinks(...) 函数中调用它的函数,即在 HtmlParser.cpp

当我尝试编译它时,我得到了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是链接时的错误。这意味着您正在使用的符号(函数)以及在编译编译单元时找到定义的符号(函数)无法在链接时解析以进行链接。

如果你只构建一个命令,你可能只需要添加一个 -lgumbo到您的命令行,最终使用 -L<path to directory containing libgumbo.so>如果它不在默认的 lib 路径中。通常:

g++ main.cc -lgumbo

或者如果 gumbo 库和 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com