如何解决如何在一个 cmake 项目中混合动态和静态 boost 库?
我正在尝试将我的 C++ 程序与静态 Boost::program_options 和动态 Boost::log 库链接起来。 这是我的 CMakeList.txt 文件:
project(test)
add_executable(testprog "main.cpp")
add_deFinitions(-DBOOST_ALL_NO_LIB)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost COMPONENTS program_options)
target_link_libraries(testprog PRIVATE Boost::program_options)
set(Boost_USE_STATIC_LIBS OFF)
add_deFinitions(-DBOOST_LOG_DYN_LINK)
find_package(Boost COMPONENTS log)
target_link_libraries(testprog PRIVATE Boost::log)
和我的 main.cpp 文件:
#define BOOST_ALL_NO_LIB
#include <iostream>
#include <string>
#include <boost/program_options.hpp>
#include <boost/log/trivial.hpp>
int main(int argc,char* argv[])
{
namespace po = boost::program_options;
po::options_description desc("allowed arguments");
desc.add_options()("log",po::value<std::string>(),"log level");
po::variables_map options;
po::store(po::command_line_parser(argc,argv).options(desc).run(),options);
po::notify(options);
if (options.count("log")) {
std::cout << "log level: " << options["log"].as<std::string>() << std::endl;
}
BOOST_LOG_TRIVIAL(info) << "test message";
return 0;
}
我收到您的计算机缺少boost_filesystem.dll错误。
如果我去掉 set(Boost_USE_STATIC_LIBS OFF)
行,我会得到未解析的外部符号 boost::log...。看起来 Boost_USE_STATIC_LIBS 在配置期间只能设置一次,但我找不到告诉 cmake 拆分静态/动态库的方法...
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。