【发布时间】: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