文章整合自:
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环境下安装zlib
http://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