我无法将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中。这里真的很茫然,因为我不确定此时出了什么问题。任何帮助表示赞赏!
答案 0 :(得分:1)
指定您要增强。在这里,您需要“系统”:
find_package(Boost REQUIRED system)
Boost设置变量以在以下情况提供帮助:
target_link_libraries(FinalProject ssl cpprestsdk::cpprest ${Boost_SYSTEM_LIBRARY})