微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在一个 cmake 项目中混合动态和静态 boost 库?

如何解决如何在一个 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?