CMake - boost - 可运行程序 - 静态库
CMake - boost
最后更新日期:2014-04-25by kagula
阅读前提:《CMake入门(二)》、Linux的基本操作
环境: Windows 8.1 64bit英文版。Visual Studio 203 Update1英文版。CMake 2.8.12.2、 Cent OS 6.5、Cent OS 6.5自带gcc 4.4.7、icu 4.2.1
内容简单介绍
介绍假设在VisualStudio上的项目依赖于boost库,怎样使用cmake工具把这个项目移到Cent OS上。
正文
CentOS下boost的安装
[S1]下载,解压缩到当前文件夹
#tar -zxvf boost_1_55_0.tar.gz
[S2]安装Boost.Regex的依赖icu
#yum install icu libicu-devel
[S3]进入boost解压缩文件夹。编译安装
#./bootstrap.sh
#./b2 install --prefix=/usr/local
这样boost的头文件会被拷贝到/usr/local/include路径,boost的静态库文件会被拷贝到/usr/local/lib路径。
Win下怎样安装boost參考资料[1]
在VisualStudio 2013上建立測试项目
新建[Visual C++]->[Win32]->[Win32Project]项目,Application type设置为console application, Additional options设置为Empty project。本次測试工程仅仅须要两个文件Source.cpp和CMakeLists.txt
如今加入Source.cpp,源代码清单:
include <iostream>
#include <boost/thread.hpp> using namespace std; void mythread()
{
cout << "Hello,thread!" << endl;
} int main()
{
boost::function<void()> f(mythread);
boost::thread t(f);
t.join(); cout << "thread is over" << endl; getchar(); return 0;
}
加入CMakeLists.txt,源代码清单例如以下
#设置项目名称
PROJECT(CMake_Tutorial3) #要求CMake的最低版本号为2.8
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #加入头文件搜索路径
INCLUDE_DIRECTORIES(/usr/local/include) #加入库文件搜索路径
LINK_DIRECTORIES(/usr/local/lib) #用于将当前文件夹下的全部源文件的名字保存在变量 DIR_SRCS 中
AUX_SOURCE_DIRECTORY(. DIR_SRCS) #用于指定从一组源文件 source1 source2 … sourceN(在变量DIR_SRCS中定义)
#编译出一个可运行文件且命名为CMake_Tutorial1
ADD_EXECUTABLE(CMake_Tutorial3 ${DIR_SRCS}) #加入编译可运行程序所须要的链接库、假设有多个中间用空格隔开
#第一个參数是可运行程序名称,第二个開始是依赖库
#在这里依据名字boost_thread去寻找libboost_thread.a文件
TARGET_LINK_LIBRARIES(CMake_Tutorial3 boost_thread)
在Cent OS上測试项目
如果我们在Win上的项目文件夹CMake_Tutorial3被拷贝到了/home/kagula/Downloads路径下。
进入路径,
$cd CMake_Tutorial3
$mkdir build
$cd build
读取父文件夹的CMakeLists.txt文件。生成Makefile文件
$cmake ..
读取Makefile。并编译项目,在当前文件夹下生成CMake_Tutorial3可运行文件
$make
执行编译出来的程序
$./CMake_Tutorial3
静态链接的优点是部署简单,不用操心目标环境,依赖库不存在或版本号不匹配,所以眼下为止我们的可运行程序都是静态链接依赖库,缺点是造成存储空间浪费,所以不适合有些大项目。下篇会提到怎样在Cent OS上用CMake工具编译动态链接库。
为什么VisualStudio2013上建的项目缺省是Win32项目而不是Win64? [1]非常少有项目须要用到大于2G的内存,[2]差点儿或没有性能提升,[3]64位系统能够执行32位程序,可是反过来不行。
參考资料
[1]《win7 vs2012 编译boost 1.55》
http://blog.csdn.net/alex_my/article/details/17630685
[2]《Bash script toinstall gcc 4.8.2 and boost 1.55.0 on CentOS 6.4, CentOS 5.5 and Mac OS X 10.9》
http://joelinoff.com/blog/?p=1003
CMake - boost - 可运行程序 - 静态库的更多相关文章
- CMake学习(1)---简单程序与库
cmake是linux平台下重要的工具,可以方便的组织makefile.之前一直在windows平台下进行软件开发,在vs2010的IDE里,只要一点run程序就能跑出结果.但是程序的编译并没有那么简 ...
- cmake 强制链接静态库
add_executable(main main.cpp) target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a) 静态库和动态库共 ...
- cmake利用toolchain.cmake生成makefile之后,make生成静态库失败问题
问题描述 利用toolchian.cmake设置好编译器后,利用make指令生成静态库,出现以下问题 Error running link command: No such file or direc ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
- iOS静态库小结--(yoowei)
准备知识: 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImage.AFNetw ...
- Linux下Gcc生成和使用静态库和动态库详解
参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...
- 在Linux中创建静态库.a和动态库.so
转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...
- iOS : 静态库制作
一.静态库简介 1. 什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式 2. 库的分类? 开源库 公开源代码, 能看到具体实现 例如MJExtension, MJRefresh, AFN ...
- [转]Linux下用gcc/g++生成静态库和动态库(Z)
Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10| 分类: linux | 标签:链接库 linux g++ gcc |举报|字号 订阅 ...
随机推荐
- 反射的妙用-类名方法名做参数进行方法调用实例demo
首先声明一点,大家都会说反射的效率低下,但是大多数的框架能少了反射吗?当反射能为我们带来代码上的方便就可以用,如有不当之处还望大家指出 1,项目结构图如下所示:一个ClassLb类库项目,一个为测试用 ...
- SDOJ 2605 闲荡
描述 L 饭后无聊,便在 BugTown 里闲荡. BugTown 共有 N 栋房屋和 M 条有向道路.每栋房屋都有一个非负整数 vi 作为标识. BugTown 有一个特性十分神奇:从任意一个房屋离 ...
- Leetcode 481.神奇字符串
神奇字符串 神奇的字符串 S 只包含 '1' 和 '2',并遵守以下规则: 字符串 S 是神奇的,因为串联字符 '1' 和 '2' 的连续出现次数会生成字符串 S 本身. 字符串 S 的前几个元素如下 ...
- MySQL将内存用在了哪里
本片文章参考官网讲述MySQL是如何分配内部内存,同时涉及到如何合适设的置内存分配以及如何监控内存的使用情况 官方文档 MySQL在启动时默认被分配给512MB RAM,可以通过设置相关内存参数对其进 ...
- [BZOJ3535][Usaco2014 Open]Fair Photography
[BZOJ3535][Usaco2014 Open]Fair Photography 试题描述 FJ's N cows (1 <= N <= 100,000) are standing a ...
- pytorch下可采用visidom作为可视化工具
2018/9/18更新 感觉tensorboardX插件更好用,已转用https://github.com/lanpa/tensorboardX 更新:新版visdom0.1.7安装方式为:cond ...
- NOIP2012开车旅行 【倍增】
题目 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为Hi,城市 i 和城 ...
- 学习orm框架及一些看法
首先说说我对现在主流的ORM框架的一些看法: 优点: 让程序员不再关注数据库细节,专心在业务逻辑上,程序员可以不懂数据库就可以开发系统. 让数据库迁移变的非常方便,如果系统需要更改使用的数据库,直接改 ...
- 常用快捷键以及linux命令整理
关于快捷键的使用,网上有很多.自己在使用过程中不断整理用到的知识点.一个项目完成了就把涉及用到的快捷键和命令介绍给大家,都是一些比较基础的,常用的命令.希望大家有好的知识点,命令可以及时交流整理. 一 ...
- 大规模SOA系统中的分布事务思考
首先是不建议采用XA两阶段提交方式去处理分布式事务,要知道要能够支持XA分布式事务,必须是要实现XA规范才可以,而Service本身是无状态的,如果这样去做了等于是把Service内部的东西暴露了出去 ...