c++ 如何使用第三方的library
感谢以下参考资料:
关于如何使用第三方的库:
http://stackoverflow.com/questions/21942545/how-to-install-third-party-libraries
http://www.learncpp.com/cpp-tutorial/a3-using-libraries-with-codeblocks/
http://forums.codeblocks.org/index.php?topic=9366.0
关于编译静态库或者动态库:
http://www.cnblogs.com/woainilsr/archive/2013/07/10/3182891.html
正文:
IDE:CodeBlocks,编译器:MinGW GNU GCC
步骤如下:
1. 把tinyxml指定的需要包含的头文件放入名为include的文件夹中
2. g++ -c *.cpp // 把所有 cpp 文件编译为 o 文件,但是不进行链接,并把所有 o 文件放到名为obj的文件夹中
3. ar -r tinyxml.a *.o // 把 o 文件 打包成库文件(后缀名通常为 a 或者 lib),以后你的Project进行构建的时候 Linker 用来 链接成 exe的时候用。 把tinyxml.a放入名为lib的文件夹中
4. 打开你的项目 选择 Project > Build Options
4.1 选择 Linker settings >
4.1.1 对 Link libraries 点击 Add,把目录:F:\cpp_libs\tinyxml\lib\tinyxml.a 添加进去
4.2 选择 Search directories >
4.2.1 选择 Compiler >
4.2.1.1 选择 Add >
4.2.1.2 拷贝tinyxml的头文件的路径:F:\cpp_libs\tinyxml\include // 这是告诉Compiler去哪里找头文件,Compiler编译你的项目的时候需要库的头文件
4.2.2 选择 Linker >
4.2.2.1 添加 o 文件所在的路径:F:\cpp_libs\tinyxml\obj // 这一步不是必须的,如果你已经将 o 文件打包成为 a 文件或者 lib 文件(也就是步骤4.1),就无需这一步了
5. 你的项目包含tinyxml的头文件,并编译执行即可,如下
注意这里使用的是<tinyxml.h>而不是"tinyxml.h",这是告诉预处理器到IDE指定的Search directories去找头文件,而不是在这个项目的目录下找。
注意:步骤4.1可以替换为如下操作,效果是一样的,4.1的操作是添加单个的库文件,而这个操作是添加库文件的搜索路径
选择 Search directories > 选择 Linker > 添加F:\cpp_libs\tinyxml\lib
这样Linker就能找到tinyxml.a了,事实上,Linker能找到目录F:\cpp_libs\tinyxml\lib下的任何库文件
main.cpp
#include <iostream>
#include <tinyxml.h> using namespace std; int main() {
const char *CFG_FILE= "E:/myprojects/test/config.xml";
TiXmlDocument doc(CFG_FILE);
if(!doc.LoadFile()) {
std::cout << "Unable to open " << CFG_FILE << std::endl;
return ;
}
TiXmlNode *root = doc.RootElement();
const char *input_file =
root->FirstChild("input-file")
->ToElement()
->GetText();
cout << input_file << endl;
return ;
}
config.xml
<config>
<input-file>sample.txt</input-file>
</config>
运行结果:
sample.txt
项目地址(不含源代码):http://pan.baidu.com/s/1o6BNqY2
总结,使用第三方库的方法(假定库名为FOO):
1、编译FOO的cpp文件(连同需要的h文件)一起编译为o文件
2、将o文件打包为a文件或者lib文件
3、为你的项目导入该a文件或者lib文件
4、为你的项目指定FOO库所需要的头文件的目录
5、编译你的项目,大功告成
c++ 如何使用第三方的library的更多相关文章
- Angular 学习笔记 ( 创建 library, 转换老旧的 library )
更新 : 2018-10-28 不知道为什么在 ng 跑一直做不到 .d.ts 最后发现,如果有一个插件 propagating-hammerjs.ts 那么就在 root create 一个 pro ...
- android常见问题
1.广播接收器中启动Activity,需要在intent中添加FLAG_ACTIVITY_NEW_TASK /** * Demo描述: * 在BroadcastReceiver中启动Activity的 ...
- php Memcache/Memcached操作手册
php Memcache/Memcached使用教程 Memcache和Memcached 其实是一个东西,只是php中要是用的扩展不一样, 2009年左右有人丰富memcache的用法和性能,编写了 ...
- windows下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件
原创文章,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4535459.html android 程序打包成apk,如果在是命令行方式,一般都要经过如下步骤: 1.用a ...
- 【转】Android新组件Material Dialog,SwipeRefreshLayout,ListPopupWindow,PopupMenu等
朝花夕拾----新组件的学习和使用 分类: Android UI2015-06-26 11:31 440人阅读 评论(0) 收藏 举报 uidialogMaterial 目录(?)[-] Mate ...
- 整理的Unity导出安卓工程利用ANT进行多渠道批量打包APK
Unity导出的安卓工程利用ant进行多渠道循环批量打包 一:设置JAVA环境变量 做android开发的配置这个是基础. win7 下配置java环境变量,下面是链接 http://www.cnbl ...
- Java Service Wrapper
Java Service Wrapper 将Java 应用程序部署成Windows系统服务Java Service Wrapper 1 Product Overview 1 Editions 2 Me ...
- Android开发周报:Flyme OS开源、经典开源项目解析
Android开发周报:Flyme OS开源.经典开源项目解析 新闻 <魅族Flyme OS源码上线Github> :近日魅族正式发布了MX5,并且在发布会上,魅族还宣布Flyme OS开 ...
- 深入了解Bundle和Map
[转]http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0402/2684.html 前言 因为往Bundle对象中放入Map实际上 ...
随机推荐
- 1.4(java学习笔记) 面向对象内存分析
首先介绍几个概念 栈: 1.栈是方法执行的内存模型,每调用一个方法都会创建一个栈帧. 2.jvm为每个线程创建一个栈,存放方法相关信息,栈属于线程私有不共享. 3.栈由系统自动分配,是连续的内存空 ...
- 输入参数之POJO包装类
1,包装类:需要实现序列化 package com.songyan.pojo; import java.io.Serializable; public class QueryVo implements ...
- redis系列文章
http://blog.csdn.net/liubenlong007/article/details/53690103
- 【spring data jpa】使用jpa进行update更新操作,避免空字段和更新后即时返回给前台的问题
修改操作 如果使用的JPA,应该是 findByUid之后 将新的值对old进行赋值,最后对old值进行flush(),即可完成更新,而不应该去更新新的实体. 示例代码: 以后补充
- 起步X5 UI模型使用的新的JAVASCRIPT UI库 DHTMLX (简称DHX)
最近学习新版本的起步X5,发现 UI控件有很多变化,按培训师的解释,X5平台界面设计引入了新的JAVASCRIPT UI库 DHTMLX. 参考:DHX http://www.dhtmlx.com ...
- C#之Raw Socket网络封包监视源码
大家可以建立一个Windows Form应用程序,在下面的各个文件中添加对应的源码: //RawSocket.csnamespace ReceiveAll{ using System; using S ...
- http://zhidao.baidu.com/link?url=3tJ_i5gyYLrd7rFPk0eRYre_oxjCZvTOMOutp89LGhUgi6Ic6Ncama_GMAHnwfF73SVYGqy364vDfv6AY4ERPa
http://zhidao.baidu.com/link?url=3tJ_i5gyYLrd7rFPk0eRYre_oxjCZvTOMOutp89LGhUgi6Ic6Ncama_GMAHnwfF73SV ...
- jstack来分析。当linux出现cpu被java程序消耗过高时
我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2 18 ...
- Netty 中文教程 (二) Hello World !详解
1.HelloServer 详解 HelloServer首先定义了一个静态终态的变量---服务端绑定端口7878.至于为什么是这个7878端口,纯粹是笔者个人喜好.大家可以按照自己的习惯选择端口.当然 ...
- Scapy基础学习之中的一个
关于Scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写). 它可以伪造或者解码大量的网络协议数据包,可以发送.捕捉.匹配请求和回复包等等.它可以非常easy地处理一些典型操 ...