如何在一个 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.JdbcOdbc...