Я должен использовать 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})
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
указать ссылку на эту библиотеку для вашей цели.
Других решений пока нет …