CMAKE静态库及动态库的引用

1、动态库

1.1 引用头文件

#导入头文件
include_directories(include)

1.2 导入动态库

#导入库文件
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}")

1.3 链接动态库

target_link_libraries( # Specifies the target library.
        #生成的动态库 native-lib

        #链接的动态库 opencv_java4

        android

        ${log-lib})

1.4 app build.gradle中添加链接的动态库到libs.src,默认jniLibs

 

2 静态库

2.1引用头文件

#将静态库的头文件添加进来
include_directories(
        ${CMAKE_SOURCE_DIR/fftw3/include} #头文件多的话可以继续往下加
)

2.2添加静态库

#添加自己所需的静态库
add_library(
        fftw3f    #库名字 去掉了 lib 与 .a
        STATIC   #必须的
        IMPORTED #必须的
)
set_target_properties(
        fftw3f
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_SOURCE_DIR}/fftw3/lib/libfftw3f.a #库在的路径,以cmakeList.txt所在的路径起
)

2.3 链接静态库


target_link_libraries( # Specifies the target library.
        #生成的动态库

        fftw3f
        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

 

### 使用 CMake 引用静态库 在 Windows 平台上使用 CMake引用静态库涉及几个重要步骤。为了确保项目能够成功编译并链接到所需的静态库,配置 `CMakeLists.txt` 文件至关重要。 #### 配置 CMakeLists.txt 文件 当构建静态链接库时,在 `CMakeLists.txt` 中应指定 `STATIC` 关键字来定义目标库的类型: ```cmake add_library(my_static_lib STATIC src/mylib.cpp) ``` 对于外部依赖项如 Boost 库,假设已经安装好并且路径已知,则可以通过如下方式引入Boost静态库[^1]: ```cmake find_package(Boost REQUIRED COMPONENTS system filesystem) target_link_libraries(your_target PRIVATE Boost::system Boost::filesystem) ``` 如果需要手动设置库文件位置以及头文件目录,可以这样做: ```cmake include_directories(${BOOST_ROOT}/include) link_directories(${BOOST_ROOT}/lib) target_link_libraries(your_target ${BOOST_ROOT}/lib/libboost_system.a ${BOOST_ROOT}/lib/libboost_filesystem.a) ``` 请注意上述命令中的 `${BOOST_ROOT}` 是指定了本地机器上的 Boost 安装根目录变量,实际应用时需替换为具体路径或者通过环境变量传递给 CMake 构建过程。 #### 头文件和库文件的位置 确保所有的头文件夹被正确加入到包含路径中,并且所有必要的 `.a` 或者 `.lib` 形式的静态库都被列为目标链接的一部分。这一步骤非常重要,因为缺少任何一个必需的头文件或对象文件都会导致编译失败。 #### 编写 main 函数测试 编写简单的应用程序去验证能否正常调用静态库的功能也是一个不错的实践方法。创建一个名为 `main.cpp` 的源文件作为程序入口点: ```cpp #include <iostream> // 假设这是来自某个静态库的一个函数声明 extern void someFunctionFromStaticLib(); int main() { std::cout << "Calling function from static library..." << std::endl; someFunctionFromStaticLib(); return 0; } ``` 最后再次强调,务必确认所有相关联的静态库都已经被正确定义于项目的 CMake 脚本之中,这样才能保证最终可执行文件能顺利生成而不受缺失 .dll 动态链接库的影响[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值