链接库
1. 链接静态库
1.1 检查是否有动态库、静态库
可以看到,在L_output文件夹中有已经生成的静态库和动态库。
此时可以在~cmake目录下删除源文件所在的目录。
$ rm src -r
在~/cmake目录下创建两个文件夹lib1和lib2。
$ mkdir lib1 lib2
把静态库拷贝到lib1,把动态库拷贝到lib2。
$ cp ./build/L_output/libcalc_1.a lib1
$ cp ./build/L_output/libcalc_2.a lib2
1.2 修改CMakeLists.txt
如下:
其中
link_libraries(calc_1)
这一行是链接静态库的命令
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib1)
这一行是要链接的静态库所在目录
1.3 运行测试
可以正常输出,链接静态库成功。
2.链接动态库
2.1 链接规则
动态库的访问权限默认为public。
动态库的链接具有传递性,如果动态库A链接了动态库B,动态库C链接了动态库A,则相当于C也链接了B,由于链接默认为Public权限,则C也可以使用动态库A、B中的方法。
权限:
PUBLIC:在public后面的库会被Link到前面的target中,并且里面的符号也会被导出,提供给第三方使用。
PRIVATE:在private后面的库仅被link到前面的target中,并且终结掉,第三方不能感知你调了啥库。
INTERFACE:在interface后面引入的库不会被链接到前面的target中,只会导出符号。
2.2修改CMakeLists.txt
如下:
其中要注意target_link_libraries(app calc_2)是链接动态库的命令,应写在最后。link_directories()要写在add_executable()之前。
2.3运行测试
能够输出正确结果,链接动态库成功。