使用CMake引入第三方so库及头文件

使用CMake引入第三方so库及头文件,第1张

将第三方库文件添加到对应的架构目录中

如果有多个目录的,可能会报错:

More than one file was found with OS independent path 'lib/armeabi-v7a/libmyJNI.so'

参考 https://blog.csdn.net/lftaoyuan/article/details/106718096

关联头文件目录到库名

导入第三方库

关联到log库中

如果加载头文件报错没找到方法,可能是因为没加载成功,仔细对照流程过一遍。

本文是在ffmpeg的编译完成的基础上用cmake对ffmpeg的so库进行调用

创建新项目的时候,记得勾选include c++ support,项目中会在main目录下自动创建cpp目录并生成一个现成的cpp文件。

效果如下:

具体在CMakeLists中添加的Cmake命令用法,请参考 这篇文章

需要注意的是CMakelists的位置,CMAKE_SOURCE_DIR就代表CMakeLists所在的路径。我的项目中CMakeLists的路径是与build.gradle同级的

Androidstudio最新版好像创建完c++后自动生成的CMakeLists是在cpp目录下的,这个CMakeLists在哪都行,不过千万要记住修改几处调用CMakeLists路径的地方。有以下几处:

1、CMakeLists中用到CMAKE_SOURCE_DIR的地方

2、build.gradle中

include/libavcodec/avcodec.h是引用的so库的头文件,需要注意使用extern "C"包裹起来

参考链接:

1、 https://www.cnblogs.com/fnlingnzb-learner/p/7593488.html

2、 https://www.jianshu.com/p/a1fe55d5683b

CMake

命名变量

set(INC_DIR /usr/local/include)

set(LINK_DIR /usr/local/lib)

set(SOURCE_FILES main.cpp)

去哪里找头文件 相当于gcc/clang 中的-I(i的大写字母)参数

include_directories(${INC_DIR})    # 用${}引用变量

去哪里找库文件 .so .dll .dylib 相当于gcc 中的-L参数

link_directories(${LINK_DIR})

要链接的库文件的名字 相当于gcc中的-l(小写的l)参数

target_link_libraries(test)

只写库名就可以,就是libxxx.so的中间xxx的部分

也可以写成下面这样

target_link_libraries(test)

通过上面的这些关键词,我们就可以使用第三方库了。

cmake_minimum_required(VERSION 2.8.12)

PROJECT (main)

ADD_EXECUTABLE(main main.c)

INCLUDE_DIRECTORIES(/usr/include/hello)

# 静态链接库

# TARGET_LINK_LIBRARIES(main libhello.a)

# 动态链接库

set(LINK_DIR /usr/local/lib)

link_directories(${LINK_DIR})

target_link_libraries(main libhello.so)

拷贝动态链接库的时候需要注意符号链接是否还在


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11362783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存