Не могу связать библиотеки для C ++ 11 на MacOS Mojave - PullRequest
0 голосов
/ 06 декабря 2018

У меня проблемы с получением boost / openssl для ссылки на мой проект C ++ в CLion.Я пытаюсь собрать свою программу в CLion, нажимая кнопку build, хотя я также пытался просто скомпилировать вручную с g ++, но безрезультатно.Мой CMakeLists.txt выглядит так:

cmake_minimum_required(VERSION 3.12)
project(FinalProject)
set(CMAKE_CXX_STANDARD 11)

# Set OpenSSL dir, this should be default on linux/mac
set(OPENSSL_INCLUDE_DIR, /usr/local/opt/openssl/bin/openssl)

# Get OpenSSL
find_package(openssl REQUIRED)

# Get cppRestSDK
find_package(cpprestsdk REQUIRED)

find_package(boost REQUIRED)



# Compile + Link
add_executable(FinalProject main.cpp)

target_link_libraries(FinalProject cpprestsdk::cpprest)

Я пытался изменить

target_link_libraries(FinalProject cpprestsdk::cpprest)

на

target_link_libraries(FinalProject boost ssl cpprestsdk::cpprest)

и многие другие варианты, чтобы гарантировать, что все зависимостиЯ использую get load (OpenSSL, cpprestsdk и Boost), однако я не могу заставить их работать, так как я получаю различные ошибки, такие как:

"library not found for "-lssl", "-lboost", "-lopenssl"

Я установил openssl с помощью homebrew, нокогда я запускаю homebrew link openssl, я получаю: "Refusing to link macOS-provided software: openssl" и добавление --force дает мне то же самое сообщение об ошибке.

Я создал символические ссылки в путях , упомянутых здесь , но нетпомогло.

Запуск CMakeLists.txt только с target_link_libraries(FinalProject cpprestsdk::cpprest) дает мне:

Undefined symbols for architecture x86_64:
  "boost::system::detail::system_category_ncx()", referenced from:
      boost::system::system_category() in main.cpp.o
  "boost::system::detail::generic_category_ncx()", referenced from:
      boost::system::generic_category() in main.cpp.o
ld: symbol(s) not found for architecture x86_64

Но я не могу понять, почему, поскольку он кажется Boost загружается нормально(Я получаю сообщение «Boost Version 1.68» при сборке с target_link_libraries(FinalProject PRIVATE cpprestsdk::cpprest boost), но также получаю сообщение об ошибке ld: library not found for -lboost).

В моем файле main.cpp (только файл с кодом) я включаю:

#include <iostream>
#include <string>
#include <cpprest/http_client.h>
#include <cpprest/filestream.h>
#include  "openssl/bio.h"
#include  "openssl/ssl.h"
#include  "openssl/err.h"

Кто-нибудь знает, что мне не хватает?Я предполагаю, что это что-то простое в моем CMakeLists.txt, но не уверен.Моя единственная версия OpenSSL - 1.0.2q, и я нахожусь на MacOS Mojave.Запуск openssl в моем терминале работает, поэтому он, похоже, находится в моем PATH.На самом деле в растерянности, так как я не уверен, что не так в данный момент.Любая помощь приветствуется!

1 Ответ

0 голосов
/ 06 декабря 2018

Укажите, что вы хотите от повышения.Здесь вам нужно «system»:

find_package(Boost REQUIRED system)

Boost устанавливает переменные, которые помогают после:

target_link_libraries(FinalProject ssl cpprestsdk::cpprest ${Boost_SYSTEM_LIBRARY})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...