为 cmake 添加 boost 编译库

boost 具有很好的平台独立性, 因此会作为首选的 api 来完成特定的功能.

我在项目中使用了 boost 的 filesystem 功能来获取程序的运行目录.

#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>

int main()
{
    ...
    std::string exePath = boost::filesystem::initial_path<boost::filesystem::path>().string();
    ...

    return 0;
}

但编译的时候提示如下错误:

In function `__static_initialization_and_destruction_0(int, int)‘:
process_template.cpp:(.text+0x1d09c): undefined reference to `boost::system::generic_category()‘
process_template.cpp:(.text+0x1d0a8): undefined reference to `boost::system::generic_category()‘
process_template.cpp:(.text+0x1d0b4): undefined reference to `boost::system::system_category()‘
CMakeFiles/process.dir/src/process_template.cpp.o: In function `boost::filesystem::initial_path()‘:
process_template.cpp:(.text._ZN5boost10filesystem12initial_pathEv[_ZN5boost10filesystem12initial_pathEv]+0x19): undefined reference to `boost::filesystem::detail::initial_path(boost::system::error_code*)‘
collect2: error: ld returned 1 exit status

很明显是没有将对应的库链接进来. 因此, 需要在 CmakeLists.txt 中添加关于 boost 的链接选项.

cmake_minimum_required(VERSION 2.8)
project( process )

SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11")
find_package(Boost REQUIRED COMPONENTS
# regex
filesystem   # 我的工程中只使用了 boost 的 filesystem 功能,因此这里只有一个组件
)
if(NOT Boost_FOUND)
    message("Not found Boost")
endif()

include_directories(${Boost_INCLUDE_DIRS})
message("${Boost_INCLUDE_DIRS}")
message("${Boost_LIBRARIES}")

add_executable( process src/process_template.cpp )
target_link_libraries(process ${Boost_LIBRARIES})

然后重新 make, 就可以顺利通过了.

[ 50%] Linking CXX executable process
[100%] Built target process

原文地址:https://www.cnblogs.com/magic-428/p/9144492.html

时间: 2024-11-12 21:49:10

为 cmake 添加 boost 编译库的相关文章

NDK开发使用cMake方式 - 添加其他的预编译库

NDK 开发使用cMake方式,网上能找到不少的教程,这里推荐一篇博文: http://blog.csdn.net/wl9739/article/details/52607010 关于添加其他的预编译库,网上很多文章写得不太准确,这里说下步骤: 1,将预编译库加入项目 2,编辑CMakeLists.txt,动态链接库是SHARED,静态是STATIC. 关键是IMPORTED_LOCATION.CMAKE_SOURCE_DIR不用手动定义,指向CMakeLists.txt所在的目录. add_l

thrift 编译调用boost动态库

In the project properties you must also set HAVE_CONFIG_H as force include the config header: "windows/confg.h" By default lib/cpp/windows/force_inc.h defines: #define BOOST_ALL_NO_LIB 1 #define BOOST_THREAD_NO_LIB 1 This has for effect to have

Qpid第二课 配置Boost依赖库环境变量

场景 Qpid依赖Boost库,一般情况下,使用CMake生成VS解决方案的时候,需要指定Boost头文件和库文件目录,否则出现如下的错误编译提示: Could not find the following Boost libraries: boost_sysytem boost_thread 解决方案一: 在环境变量中新建一个:名为BOOST_ROOT,值为E:\work2\boost_1_58_0 解决方案二: 在环境变量中新建一个:名为BOOST_INCLUDEDIR,值为E:\work2

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用

继续完善Hello World,建立它的共享库, 包括静态库和动态库. 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). cd /home/ccj/CMakeDemo mkdir t3   cd /backup/cmake/t3 mkdir lib   在t3目录下建立CMakeLists.txt,内容如下: PRO

HelloWorld CMake Demo 03:CMake中构建静态库与动态库及其使用

? 继续完善Hello World,建立它的共享库, 包括静态库和动态库. ? 本节的任务: 1,建立一个静态库和动态库,提供HelloFunc函数供其他程序编程使用,HelloFunc 向终端输出Hello World字符串. 2,安装头文件与共享库. 3, 编写一个程序使用创建的共享库(静态库和动态库). ? 一,准备工作: 在/home/ccj/CMakeDemo目录建立t3目录,用于存放本节涉及到的工程. cd /home/ccj/CMakeDemo mkdir t3 ? 二,建立共享库

boost::filesystem库使用入门

以下知识点转自:点击打开原文链接 今天拿起手要用C++写个小工具,从指定的目录递归遍历文件,然后做一下处理.又翻了一下boost的filesystem库.小结一下,希望能加深印象,免得下次又要查看文档. 1. path对象就是一个跨平台的路径对象.有许多方法访问路径的各个部分,也用它的iterator迭代路径中的各个部分: path构造目录结构的时候使用"/"运算符,非常直观. 比如path p1; path p2 = p1/"something"; p1 /= &

ubuntu下boost编译安装

ubuntu下boost编译安装 boost 安装 1.依赖安装 apt-get install mpi-default-dev libicu-dev python-dev python3-dev libbz2-dev zlib1g-dev 2.访问boost官网下载boost最新版本 3.解压下载文件,例如下载文件在~/Downloads下 cd ~/Downloads tar --bzip2 -xvf boost_1_58_0.tar.bz2  4.准备安装 cd boost_1_58 ./

Boost::thread库的使用

阅读对象 本文假设读者有几下Skills [1]在C++中至少使用过一种多线程开发库,有Mutex和Lock的概念. [2]熟悉C++开发,在开发工具中,能够编译.设置boost::thread库. 环境 [1]Visual Studio 2005/2008 with SP1 [2]boost1.39/1.40 概要 通过实例介绍boost thread的使用方式,本文主要由线程启动.Interruption机制.线程同步.等待线程退出.Thread Group几个部份组成. 正文 线程启动 线

VS2008 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”

随笔 - 79, 文章 - 0, 评论 - 7, 引用 - 0 1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开. (等同于“#pragma comment(lib, "winsock.lib") ”语句) 2. 添加库(Libs)文件目录 方法 1:[解决方案资源管理器]“项目->属性->配置属性->