C语言库学习(三):用cJSON做动态库(linux/windows/qt)

动态库

动态库在运行时加载到共享区(堆区和栈区中间的一个特定区域),编译时要加上与位置无关的选项-fPIC

linux下动态库的制作

准备好cJSON.c cJSON.h文件
执行gcc cJSON.c -o cJSON.o -c -fPIC,编译出与位置无关的文件
再执行gcc cJSON.o -shared -o libcjson.so 得到动态库so文件
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第1张图片

  • -fPIC(或-fpic):表示编译为位置无关代码
  • -shared:指定生成动态链接库
    也可以使用gcc -fPIC -shared -o libxxxx.so xxx.c一句执行完

Linux动态库的使用

编译main.c gcc main.c -o jsonapp -L. -lcjson
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第2张图片
使用ldd查看动态库链接是否正确
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第3张图片
使用动态库的方法:

  1. 拷贝到/lib
  2. 环境变量 $LD_LIBRARY_PATH
  3. 修改文件 sudo vi /etc/ld.so.conf

可以添加当前目录export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第4张图片

windows vs2017制作动态库

新建动态库项目
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第5张图片
删除自带的一堆东西,把cJSON的c和h复制到目录下,添加到项目,右键.c文件选择属性
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第6张图片
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第7张图片
F6编译,编译后在上一级Debug目录下就有.dll文件和lib文件了
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第8张图片

使用dll文件

新建工程,添加main.cpp
设置工程的属性
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第9张图片
然后在资源文件添加现有项,把lib文件加进来
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第10张图片

不添加资源文件,也可以使用#pragma comment(lib,"Dll1.lib")

编译运行成功
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第11张图片

Qt 创建动态库

C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第12张图片
在这里插入图片描述
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第13张图片
在pro文件中加入LIBS +=-L$$PWD -ldcjson
在这里插入图片描述
C语言库学习(三):用cJSON做动态库(linux/windows/qt)_第14张图片

你可能感兴趣的:(Qt,C语言,linux)