游戏后端技术_CMake链接库原理及应用
最近更新:2024-09-23
|
字数总计:778
|
阅读估时:3分钟
|
阅读量:次
- 链接库
- 静态库
- 动态库
- CMake生成库
- 静态库
- 动态库
链接库
- 加密
- 模块化开发
静态库
- 生成二进制汇编代码(步骤 -c 将源文件进行汇编,得到.o文件)
- ar src 库名 二进制文件…
- s 创建目标文件索引
- r 在库中插入模块
- c 创建一个库(不管存在与否)
- 发布
- 头文件
- libxxx.a文件
- 编译时链接加载 -I头文件搜索路径 -L库文件搜索路径 -l库名
- 优缺点:
- 加载速度快
- 发布时不需要额外提供库,发布方便
- 相同库文件可能加载多份,浪费内存
- 静态库修改,可执行程序也要重新加载
1 2 3 4 5 6 7 8
| g++ add.cpp sub.cpp mul.cpp div.cpp -c
ar src libcalc.a add.o sub.o mul.o div.o
g++ main.cpp -o main -I./ -L./ -lcalc ./main
|
动态库
- 生成二进制汇编文件(步骤-c将源文件进行汇编,得到.o文件 指定-fPIC使用相对位置)
- gcc -shared
- 发布
- 头文件
- libxxx.so文件
- 运行时加载 -L搜索路径 -l库名
- 链接
- rpath 生成可执行程序时,-WI,-rpath=/path/to/
- 系统变量
- 用户级 !/.bashrc
- 系统级 /etc/profile
- source ~/.bashrc使配置生效
- 动态库的缓存文件 /etc/ld.so.cache
- 系统目录/usr/local/lib /usr/lib
- 优缺点
- 实现了不同资源间的资源共享(需要注意的是,共享的是代码,全局变量仍然是每个程序单独一份的,所以即使修改了也不会相互影响,本来就是安全的)
- 升级维护简单,只需要重新编译动态库
- 控制何时加载
- 加载速度慢
- 发布程序时需要提供动态库
1 2 3 4 5 6 7 8 9 10 11 12
| g++ add.cpp sub.cpp mul.cpp div.cpp -c -fPIC
g++ -shared add.o sub.o mul.o div.o -o libcalc.so
g++ main.cpp -o main -I./ -L./ -lcalc -Wl,-rpath=./
./main
|
CMake生成库
静态库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
cmake_minimum_required(VERSION 3.20)
project(v3)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
add_library(calc STATIC ${SRC})
link_directories(${PROJECT_BINARY_DIR}/lib)
link_libraries(calc) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) add_executable(v3 main.cpp)
|
动态库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
cmake_minimum_required(VERSION 3.20)
project(v4)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC) set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
add_library(calc SHARED ${SRC})
link_directories(${PROJECT_BINARY_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) add_executable(v4 main.cpp)
target_link_libraries(v4 calc)
|
2024-06-09
该篇文章被 Cleofwine
归为分类:
Game