无法在MacOS Mojave上链接C ++ 11的库

时间:2018-12-06 17:42:35

标签: c++ macos boost cmake openssl

我无法将boost / openssl链接到CLion中的C ++项目。我试图通过单击build在CLion中构建程序,尽管我也一直尝试使用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)

和许多其他变体来确保加载我正在使用的所有依赖项(OpenSSL,cpprestsdk和Boost),但是由于不断出现各种错误,我似乎无法使其中的任何一个正常工作

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

我使用自制软件安装了openssl,但是当我运行homebrew link openssl时,我得到了:"Refusing to link macOS-provided software: openssl"并添加--force也会得到相同的错误消息。

我已经在路径mentioned here中创建了符号链接,但无济于事。

仅使用target_link_libraries(FinalProject cpprestsdk::cpprest)运行CMakeLists.txt就会给我:

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可以很好地加载(当我使用target_link_libraries(FinalProject PRIVATE cpprestsdk::cpprest boost)进行构建时,我收到消息“ Boost Version 1.68”,但也出现了错误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 :(得分:1)

指定您要增强。在这里,您需要“系统”:

find_package(Boost REQUIRED system)

Boost设置变量以在以下情况提供帮助:

target_link_libraries(FinalProject ssl cpprestsdk::cpprest ${Boost_SYSTEM_LIBRARY})