文件结构
其中,libtask_handle.so是自己生成的库文件,在调用时,CMakeLists.txt写法如下:
cmake_minimum_required(VERSION 3.16)
project(task_handle)
set(CMAKE_CXX_STANDARD 17)
include_directories(include)
add_executable(main main.cpp)
target_link_libraries(main ${PROJECT_SOURCE_DIR}/libtask_handle.so)
即使库文件在当前文件夹下,但不在系统路径中,所以必须加上绝对路径或使用
${PROJECT_SOURCE_DIR}代表源文件所在目录,也是当前项目的根目录
此外,库对应的文件的目录也必须给出,使用include_directories
在运行时,链接不到动态库,需将动态库路径添加到变量LD_LIBRARY_PATH,
临时, 终端命令 export LD_LIBRAY_PATH= /my/lib/:${LD_LIBRARY_PATH}
永久, 在.bashrc下添加 export LD_LIBRAY_PATH= /my/lib/:${LD_LIBRARY_PATH}
原理:
为什么修改LD_LIBRARY_PATH呢
因为运行时动态库的搜索路径的先后顺序是:
1.编译目标代码时指定的动态库搜索路径;
2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
4.默认的动态库搜索路径/lib和/usr/lib;
2.再看下库生成
cmakelist.txt的写法
cmake_minimum_required(VERSION 3.16)
project(task_handle)
set(CMAKE_CXX_STANDARD 17)
add_library(task_handle SHARED task_handle.cpp task_handle.h)