美文网首页Cmake学习
Cmake 静态库链接静态库

Cmake 静态库链接静态库

作者: Tooosky | 来源:发表于2020-01-16 10:08 被阅读0次

问题描述

我编译了一个静态库B,它依赖了静态库A,同时在CMakeLists.txt使用target_link_libraries(B A) 设定了B链接A,但是当我在使用B时,发现静态库B中并没有A的内容。

B-->A

也就是说,cmake并没有帮我把静态库A的内容加到静态库B中!!!!

经过查找资料,cmake确实不会合并两个静态库,那么问题来了,如何让cmake帮我把静态库合并成一个。

答案

通过生成后事件,自己合并。

对静态库的合并操作,windows可以通过lib.exe程序,linux可以通过arranlib程序达到目的。

windows下:

add_custom_command(TARGET examplelib POST_BUILD
                            COMMAND lib.exe /out:tmp.lib B.lib A.lib
                            COMMAND ${CMAKE_COMMAND} -E rename tmp.lib B.lib
                            )
                            

linux下:
linux并不能直接将两个.a文件合并,必须先把.a拆成.o文件,再把所有.o文件合并在一起

add_custom_command(TARGET examplelib POST_BUILD
                            COMMAND ar x libA.a
                            COMMAND ar x libB.a
                            COMMAND ar cru libB.a *.o
                            COMMAND ranlib libB.a
                            )

需要注意,上方代码只是讲述了原理,实际使用还需要注意文件的路径问题。

相关文章

  • Cmake 静态库链接静态库

    问题描述 我编译了一个静态库B,它依赖了静态库A,同时在CMakeLists.txt使用target_link_l...

  • 静态库静态链接静态库

    静态库·静态链接·静态库 这么搞的都是有强迫症的人在做SDK。 not me. PS: 多次静态链接同一个第三方库...

  • IOS SDK 静态.a库创建调试

    静态库 1、静态库即静态链接库(例如: windows下的.lib、Mac和Linux下的.a); 2、静态库在编...

  • linux下静态库 动态库和 gcc gdb Makefile

    一、静态库和动态库 定义 根据链接时期的不同,库有静态库和动态库之分。 静态库是在链接阶段被链接的,所以生成的可执...

  • ios中静态库.a的制作

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • ios中静态库.a的制作和使用

    在ios中制作静态库之前,先来了解关于静态库的一些概念。 八、静态库和动态库在使用上的区别。静态库:链接时,静态库...

  • 静态库和动态库

    静态库:.a 和 .framework动态库:.tbd(.dylib) 和 .framework静态库:链接时会...

  • Linux链接库

    动态链接库(共享链接库) 杂项 生成.o文件 生成.so 使用动态库 静态链接库 杂项 生成.a 查看.a 使用静态库

  • QT中dll的生成及使用

    C++中的库分为三种:静态库、动态库和导入库 1、静态库:     静态库扩展名为.lib,静态链接(即代码会直接...

  • 创建静态库

    iOS深入学习(创建静态库static library) 库包含静态库和动态链接库,他们之间区别是:静态库可以编译...

网友评论

    本文标题:Cmake 静态库链接静态库

    本文链接:https://www.haomeiwen.com/subject/jbqfzctx.html