cmake — вызывает функцию C в реализации класса C ++

Я должен использовать https://github.com/google/gumbo-parser библиотека, написанная на C.

у меня есть HtmlParser класс, который определен в HtmlParser.h и я реализую его методы в HtmlParser.cpp

Я включаю gumbo.h в HtmlParser.h и назвать его функции, реализованные мной getLinks(...) функция, которая находится в HtmlParser.cpp

Когда я пытаюсь скомпилировать его, я получаю неопределенная ссылка на gumbo_parse
Как я могу это исправить?

Мой make-файл

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})

1

Решение

undefined reference это ошибка во время ссылки. Это означает, что символ (функция), который вы используете и для которого было найдено определение при компиляции модуля компиляции, не может быть разрешен во время ссылки для ссылки.

Если вы встраиваете только одну команду, вам, вероятно, просто нужно добавить -lgumbo в командной строке, в конце концов с -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) опции для команды 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 указать, где его найти. Тогда используйте target_link_libraries указать ссылку на эту библиотеку для вашей цели.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]