【问题标题】:Can't link libraries for C++11 on MacOS Mojave无法在 MacOS Mojave 上链接 C++11 的库
【发布时间】:2019-05-08 11:29:35
【问题描述】:

我无法让 boost/openssl 链接到我在 CLion 中的 C++ 项目。我试图通过单击构建在 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”,但我也收到错误 @987654333 @)。

在我的 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 中。真的很茫然,因为我不确定此时出了什么问题。任何帮助表示赞赏!

【问题讨论】:

  • 只是一个建议:一次解决一个问题。首先,其中一个库,然后是 cmake,然后是另一个库。首先,这减少了每个问题的规模。其次,在这里发帖是必需的,因为一次问两三个问题是不受欢迎的,而且你会自动获得所需的minimal reproducible example

标签: c++ macos boost cmake openssl


【解决方案1】:

指定你想要的 boost。在这里,你需要“系统”:

find_package(Boost REQUIRED system)

Boost 设置变量来帮助之后:

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

【讨论】:

    猜你喜欢
    • 2019-03-03
    • 2018-02-10
    • 2019-03-20
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多