标签:
自学习C/C++以来,接触到很多很强大的库,例如opencv,boost等等,但相关的范例和教程书,都提倡在电脑上安装这些库,在一定程度上我是很讨厌这么干的,而是提倡使用命令行编译生成可执行文件,在命令行中注明头文件的位置和库文件的位置。
这么做一方面透明性高,自己在编译时知道使用了什么库,什么头文件,很方便debug。
二来,可以提高可移动性,如果将opencv库编译成链接库文件,安装在/usr/libs/文件夹下,linux系统编译我们的源程序时,自然能够找到这些头文件和库文件,因为这是linux默认的寻找库文件的位置,但是该工程文件夹复制到windows或者mac系统中编译,就会出错。 因为文件系统是不一样的,而如果我们使用命令行编译,就可以避免这样的问题。
以编译一个调用了boost库文件的程序test.cpp为例:
#include "boost/lambda/lambda.hpp"
#include <iostream>
#include <iterator>
#include <algorithm>
int main(int argc, char* argv[])
{
using namespace boost::lambda;
typedef std::istream_iterator<int> in;
std::for_each(in(std::cin), in(), std::cout<<(_1*3)<<" ");
}
如果头文件和源文件放在一个文件中,
命令行:$g++ -I (path to boost file) test.cpp -o test
-I代表include, path to boost file是用户下载并解压出的boost文件夹,存在的位置,以windows系统为例: 我存放的位置是 C:\Users\s145019\Downloads\boost_1_60_0
则命令行为:$g++ -I C:\Users\s145019\Downloads\boost_1_60_0 test.cpp -o test
生成可执行文件test。
如果头文件和对应的源文件没有放在一个文件中,而是分至在两个不同的文件夹中,
则命令行为:$g++ -I (path to head file) -L (path to library file) -l *** test.cpp -o test
-L代表library,path to library file 代表库文件存放的位置。 -l ***代表需要用到的动态或者静态链接库
PS: 如果有必要也可以将Opencv或者boost这些使用的库,安装到系统中
标签:
原文地址:http://www.cnblogs.com/cbyzju/p/5193753.html