Не могу устранить ошибку связывания

Мне нужно включить библиотеку proxygen в мой проект. Все успешно установлено. Единственная проблема заключается в том, что в проекте есть ошибка связывания, которую я не могу решить.

ОС, в которой я работаю, — Ubuntu 14.04.

Вот журнал ошибок:

/home/cortana/clion-2016.1.3/bin/cmake/bin/cmake --build /home/cortana/.CLion2016.1/system/cmake/generated/string_from_url-a5f32588/a5f32588/Debug --target tutifruti -- -j 4
[ 33%] Linking CXX executable /home/cortana/ClionProjects/string_from_url/build/tutifruti
CMakeFiles/tutifruti.dir/src/main.cpp.o: In function `main':
/home/cortana/ClionProjects/string_from_url/src/main.cpp:114: undefined reference to `proxygen::HTTPConnector::HTTPConnector(proxygen::HTTPConnector::Callback*, folly::HHWheelTimer*)'
/home/cortana/ClionProjects/string_from_url/src/main.cpp:116: undefined reference to `proxygen::HTTPConnector::setPlaintextProtocol(std::string const&)'
/home/cortana/ClionProjects/string_from_url/src/main.cpp:126: undefined reference to `proxygen::HTTPConnector::connectSSL(folly::EventBase*, folly::SocketAddress const&, std::shared_ptr<folly::SSLContext> const&, ssl_session_st*, std::chrono::duration<long, std::ratio<1l, 1000l> >, std::map<folly::AsyncSocket::OptionKey, int, std::less<folly::AsyncSocket::OptionKey>, std::allocator<std::pair<folly::AsyncSocket::OptionKey const, int> > > const&, folly::SocketAddress const&, std::string const&)'
/home/cortana/ClionProjects/string_from_url/src/main.cpp:134: undefined reference to `proxygen::HTTPConnector::connect(folly::EventBase*, folly::SocketAddress const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, std::map<folly::AsyncSocket::OptionKey, int, std::less<folly::AsyncSocket::OptionKey>, std::allocator<std::pair<folly::AsyncSocket::OptionKey const, int> > > const&, folly::SocketAddress const&)'
/home/cortana/ClionProjects/string_from_url/src/main.cpp:114: undefined reference to `proxygen::HTTPConnector::~HTTPConnector()'
/home/cortana/ClionProjects/string_from_url/src/main.cpp:114: undefined reference to `proxygen::HTTPConnector::~HTTPConnector()'
CMakeFiles/tutifruti.dir/src/CurlClient.cpp.o: In function `CurlService::CurlClient::connectSuccess(proxygen::HTTPUpstreamSession*)':
/home/cortana/ClionProjects/string_from_url/src/CurlClient.cpp:81: undefined reference to `proxygen::HTTPUpstreamSession::newTransaction(proxygen::HTTPTransactionHandler*)'
collect2: error: ld returned 1 exit status
make[3]: *** [/home/cortana/ClionProjects/string_from_url/build/tutifruti] Error 1
make[2]: *** [CMakeFiles/tutifruti.dir/all] Error 2
make[1]: *** [CMakeFiles/tutifruti.dir/rule] Error 2
make: *** [tutifruti] Error 2

Здесь библиотека успешно добавлена, но не может связать себя с этими упомянутыми заголовками. При проверке в Интернете я обнаружил, что мне нужно добавить двоичные файлы нужного заголовка (включая cpp).

Мой cmake до сих пор:

cmake_minimum_required(VERSION 2.8)
project(string_from_url)
find_package(Boost COMPONENTS system filesystem REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/build)
find_package( OpenCV REQUIRED )


set(SOURCE_FILES src/main.cpp)
add_executable(tutifruti ${CMAKE_CURRENT_LIST_DIR}/src/main.cpp src/CurlClient.cpp)

target_link_libraries(tutifruti gflags)
target_link_libraries(tutifruti glog)

target_link_libraries(tutifruti folly)
target_link_libraries(tutifruti proxygenhttpserver)
target_link_libraries(tutifruti SDL2)
target_link_libraries(tutifruti GL)
target_link_libraries(tutifruti GLU)
target_link_libraries(tutifruti glut)
target_link_libraries(tutifruti GLEW)
target_link_libraries(tutifruti wangle)
target_link_libraries(tutifruti pthread)
target_link_libraries(tutifruti config++)
target_link_libraries(tutifruti opencv_core)
target_link_libraries(tutifruti opencv_highgui)
target_link_libraries(tutifruti opencv_imgproc)
target_link_libraries(tutifruti opencv_videoio)
target_link_libraries(tutifruti opencv_objdetect)
target_link_libraries(tutifruti ${OpenCV_LIBS})
target_link_libraries(tutifruti ${Boost_LIBRARIES})

Пожалуйста, помогите мне здесь: /

РЕДАКТИРОВАТЬ: вывод find / -name "*proxygenhttpserver*" -type f :

find: `/sys/kernel/debug': Permission denied
find: `/etc/cups/ssl': Permission denied
find: `/etc/polkit-1/localauthority': Permission denied
find: `/etc/ssl/private': Permission denied
find: `/proc/tty/driver': Permission denied
find: `/proc/1/task/1/fd': Permission denied
find: `/proc/1/task/1/fdinfo': Permission denied
find: `/proc/1/task/1/ns': Permission denied
find: `/proc/1/fd': Permission denied
find: `/proc/1/map_files': Permission denied
find: `/proc/1/fdinfo': Permission denied
find: `/proc/1/ns': Permission denied
find: `/proc/2/task/2/fd': Permission denied
find: `/proc/2/task/2/fdinfo': Permission denied
find: `/proc/2/task/2/ns': Permission denied
find: `/proc/2/fd': Permission denied
find: `/proc/2/map_files': Permission denied
find: `/proc/2/fdinfo': Permission denied
find: `/proc/2/ns': Permission denied
find: `/proc/3/task/3/fd': Permission denied
find: `/proc/3/task/3/fdinfo': Permission denied
find: `/proc/3/task/3/ns': Permission denied
find: `/proc/3/fd': Permission denied
find: `/proc/3/map_files': Permission denied
find: `/proc/3/fdinfo': Permission denied
find: `/proc/3/ns': Permission denied
find: `/proc/5/task/5/fd': Permission denied
find: `/proc/5/task/5/fdinfo': Permission denied
find: `/proc/5/task/5/ns': Permission denied
find: `/proc/5/fd': Permission denied
find: `/proc/5/map_files': Permission denied
find: `/proc/5/fdinfo': Permission denied
find: `/proc/5/ns': Permission denied
find: `/proc/7/task/7/fd': Permission denied
find: `/proc/7/task/7/fdinfo': Permission denied
find: `/proc/7/task/7/ns': Permission denied
find: `/proc/7/fd': Permission denied
find: `/proc/7/map_files': Permission denied
find: `/proc/7/fdinfo': Permission denied
find: `/proc/7/ns': Permission denied
find: `/proc/8/task/8/fd': Permission denied
find: `/proc/8/task/8/fdinfo': Permission denied
find: `/proc/8/task/8/ns': Permission denied
find: `/proc/8/fd': Permission denied
find: `/proc/8/map_files': Permission denied
find: `/proc/8/fdinfo': Permission denied
find: `/proc/8/ns': Permission denied
find: `/proc/9/task/9/fd': Permission denied
find: `/proc/9/task/9/fdinfo': Permission denied
find: `/proc/9/task/9/ns': Permission denied
find: `/proc/9/fd': Permission denied
find: `/proc/9/map_files': Permission denied
find: `/proc/9/fdinfo': Permission denied
find: `/proc/9/ns': Permission denied
find: `/proc/10/task/10/fd': Permission denied
find: `/proc/10/task/10/fdinfo': Permission denied
find: `/proc/10/task/10/ns': Permission denied
find: `/proc/10/fd': Permission denied
find: `/proc/10/map_files': Permission denied
find: `/proc/10/fdinfo': Permission denied
find: `/proc/10/ns': Permission denied
find: `/proc/11/task/11/fd': Permission denied
find: `/proc/11/task/11/fdinfo': Permission denied
find: `/proc/11/task/11/ns': Permission denied
find: `/proc/11/fd': Permission denied
find: `/proc/11/map_files': Permission denied
find: `/proc/11/fdinfo': Permission denied
find: `/proc/11/ns': Permission denied
find: `/proc/12/task/12/fd': Permission denied
find: `/proc/12/task/12/fdinfo': Permission denied
find: `/proc/12/task/12/ns': Permission denied
find: `/proc/12/fd': Permission denied
find: `/proc/12/map_files': Permission denied
find: `/proc/12/fdinfo': Permission denied
find: `/proc/12/ns': Permission denied
find: `/proc/13/task/13/fd': Permission denied
find: `/proc/13/task/13/fdinfo': Permission denied
find: `/proc/13/task/13/ns': Permission denied
find: `/proc/13/fd': Permission denied
find: `/proc/13/map_files': Permission denied
find: `/proc/13/fdinfo': Permission denied
find: `/proc/13/ns': Permission denied

и многое другое.


person lee huang    schedule 20.06.2016    source источник
comment
1) Как вы установили proxygenhttpserver? 2) На какой ОС вы работаете?   -  person devopsfun    schedule 21.06.2016
comment
Установил по инструкции, которая там была. Я работаю над Ubuntu 14.04.   -  person lee huang    schedule 21.06.2016
comment
3) Какой у вас вывод этой команды: find / -name "*proxygenhttpserver*" -type f?   -  person devopsfun    schedule 21.06.2016
comment
Я использовал контейнер докеров для теста с Dockerfile, предоставленным проектом, т.е. было бы то же самое, если бы я запускал команду ./deps.sh && ./reinstall.sh на обычной машине (с привилегиями sudo). После этого, когда я запускаю эту команду find, я нахожу статическую и общую библиотеку proxygenhttpserver в /usr/local/lib. На вашей машине так же?   -  person devopsfun    schedule 21.06.2016
comment
Нет, я не проводил этот докер-тест. Нужно ли запускать команду ./deps.sh && ./reinstall.sh в корневой папке или это что-то другое?   -  person lee huang    schedule 21.06.2016
comment
Вы должны запустить команду find с sudo, т.е. sudo find ...   -  person devopsfun    schedule 21.06.2016
comment
Я полагаю, вы используете проект facebook/proxygen с github.com? Если да, то в части Installing написано, что для установки этого проекта надо запустить команду ./deps.sh && ./reinstall.sh. Если вам нужны библиотеки в системных каталогах, вы должны запустить эти команды как root / sudo   -  person devopsfun    schedule 21.06.2016
comment
Хорошо, тогда переустановлю так. Является ли cmake правильным или я должен изменить его? Я мало что о нем знаю и сначала подумал, что в нем чего-то не хватает, из-за чего и произошла ошибка.   -  person lee huang    schedule 21.06.2016
comment
Насколько я вижу, ваш CMakeLists.txt должен быть правильным, при условии, что каждая библиотека, указанная в строке target_link_libraries, находится в каталоге системной библиотеки.   -  person devopsfun    schedule 21.06.2016
comment
Я установил библиотеку с помощью sudo, и она все равно выдает те же ошибки.   -  person lee huang    schedule 21.06.2016


Ответы (1)


Ошибка вашей ссылки относится к классу HTTPConnector, который находится в proxygen/lib (вместо proxygen/httpserver), поэтому вам, вероятно, нужно добавить

target_link_libraries(tutifruti proxygenlib)

в ваш файл cmake.

Обновлено, чтобы добавить: я могу использовать HTTPMessage без добавления вышеуказанной библиотеки, поэтому я согласен с Кристианом, что файлы CMakeLists.txt верны как есть. Я не вижу ответа на предложение Кристиана запустить find с помощью sudo. Это должно выявить проблему.

person Matt Richards    schedule 17.10.2016