CMake入门学习+实战<四> 使用外部共享库和头文件+实战:使用CLion调用zlib静态库实现pdf flatedecode解码
2017-06-27 09:43
555 查看
文章整合自:
CMake Practice
http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf
CMake 官方文档
https://cmake.org/cmake/help/latest/
以及其他网络资料
目标:
代码移植
静动态库编译调用
文章为CMake Practice的笔记以及一些错误整改或者补充。请参照源文章学习,官方文章以供深入学习。
思维导图为cmake practice目录,阅读时间建议为半天
<三>cmake hello使用外部共享库和头文件
文章中存在的错误:
将.c文件改为.cpp
上一章中我们将.c改成了.cpp,这次一样。
实验了调用LINK_DIRECTORIES(/usr/local/lib)语句更改lib链接lib库目录,发现没有必要。找到.h文件即可。
无法找到库文件路径
./main: error while loading shared libraries: libhello.so.1: cannot open shared object file: No such file or directory
报错信息如上,提供三种解决方案 :
//1. cmake 设置安装路径
#set lib path only works in unix systems
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/usr/local/lib")
//2. t4项目中src目录下的CMakeLists.txt添加如下语句设置自动搜寻路径
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")
//3. 系统设置变量
Add
LD_LIBRARY_PATH="/path/you/want1:/path/you/want/2"to /etc/environment推荐使用第二种,其他解决方案kaili2017环境下测试无效。----------------------------------------------------------------实战——结合CLion调用zlib库完成pdf中stream流flatedecode解码1. Linux环境下安装zlibhttp://www.zlib.net/官网下载zlib的源码,本次是用最新1.2.11源码,解压后目录运行如下命令
本部分参考:http://xueliang.org/article/detail/20160617235632656
2.加载zlib库完成flatedecode解码
新建项目,在主目录CMakeLists.txt中add_executable语句下方新增语句
项目中包含zlib.h和zconf.h头文件(定义了一个宏,非必须)
具体利用代码
测试成功完成flatedecode解码
另推荐一篇博文,使用zlib库实现解压缩zip包: http://blog.csdn.net/leehdsniper/article/details/51321501
CMake Practice
http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf
CMake 官方文档
https://cmake.org/cmake/help/latest/
以及其他网络资料
目标:
代码移植
静动态库编译调用
文章为CMake Practice的笔记以及一些错误整改或者补充。请参照源文章学习,官方文章以供深入学习。
思维导图为cmake practice目录,阅读时间建议为半天
<三>cmake hello使用外部共享库和头文件
文章中存在的错误:
将.c文件改为.cpp
上一章中我们将.c改成了.cpp,这次一样。
实验了调用LINK_DIRECTORIES(/usr/local/lib)语句更改lib链接lib库目录,发现没有必要。找到.h文件即可。
无法找到库文件路径
./main: error while loading shared libraries: libhello.so.1: cannot open shared object file: No such file or directory
报错信息如上,提供三种解决方案 :
//1. cmake 设置安装路径
#set lib path only works in unix systems
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/usr/local/lib")
//2. t4项目中src目录下的CMakeLists.txt添加如下语句设置自动搜寻路径
SET(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib")
//3. 系统设置变量
Add
LD_LIBRARY_PATH="/path/you/want1:/path/you/want/2"to /etc/environment推荐使用第二种,其他解决方案kaili2017环境下测试无效。----------------------------------------------------------------实战——结合CLion调用zlib库完成pdf中stream流flatedecode解码1. Linux环境下安装zlibhttp://www.zlib.net/官网下载zlib的源码,本次是用最新1.2.11源码,解压后目录运行如下命令
./configure make sudo make install
本部分参考:http://xueliang.org/article/detail/20160617235632656
2.加载zlib库完成flatedecode解码
新建项目,在主目录CMakeLists.txt中add_executable语句下方新增语句
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/usr/local/lib") INCLUDE_DIRECTORIES(/usr/local/include) #我的include头文件存放目录 TARGET_LINK_LIBRARIES(项目名 libz.a)
项目中包含zlib.h和zconf.h头文件(定义了一个宏,非必须)
具体利用代码
#include <zlib.h> int infalte_zlib(BYTE * source, BYTE * dest) { //source & dest like what it names uLongf dstLen,bufLen; //inflate uncompress(dest, &dstLen, source, CHUNK_L); return 0; }
测试成功完成flatedecode解码
另推荐一篇博文,使用zlib库实现解压缩zip包: http://blog.csdn.net/leehdsniper/article/details/51321501
相关文章推荐
- CMake入门学习+实战<三> 静态库与动态库构建
- solr学习之路 摆脱solr页面客户端使用代码实现增删查改 <四>
- CMake入门学习+实战<二> helloworld完善
- 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件【转】
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <四>
- AndroidStudio 中使用 百度地图 <四> 百度地图实现打开就显示当前位置,个人摘要
- LDAP学习笔记<四>jldap实现Java对LDAP的基本操作
- 使用JDK提供的ThreadLocal实现线程范围的共享变量(类似于Map<Thread,Variable>)
- 基于.NET的分词软件设计与实现V5.0--使用Hashtable和HashSet<T>提高分词效率
- 从外部的js文件中使用<%=%>获取ASPX页面的ClientID获取后台代码
- 短信猫软件的实现(C#)<四>PDU格式编码C#实现(转)
- 如何实现具有层次结构的 TreeView <四> (WPF/TreeView/Style/Template)
- 使用Enumerable.OfType<T>扩展方法实现非泛型集合的Linq查询
- 使用 .NET 4.0 中的Lazy<T> 实现延迟初始化
- 在C#中调用JavaScript等脚本的实现<转>
- 短信猫软件的实现(C#)<四>PDU格式编码C#实现
- Effective C# 学习笔记(三十一)利用IComparable<T>和IComparer<T>接口来实现排序关系
- ArcGIS API for Silverlight开发入门(7):使用非AGS数据源的图层<转>
- jQuery入门学习二:使用jQuery方式实现异步登录验证