首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

cmake链接单独共享和静态库

CMake是一个跨平台的开源构建工具,用于管理软件构建过程。它使用简单的配置文件来描述构建过程,并生成适用于各种编译器和操作系统的构建脚本。

在CMake中,链接单独共享库和静态库是通过使用target_link_libraries命令来实现的。该命令用于将目标与库文件进行链接。

链接单独共享库时,需要提供共享库的名称。CMake会根据操作系统的不同,自动查找并链接相应的共享库。对于Linux系统,CMake会在默认的库搜索路径中查找共享库;对于Windows系统,CMake会在系统路径和指定的库搜索路径中查找共享库。

链接静态库时,需要提供静态库的名称。CMake会在指定的库搜索路径中查找静态库,并将其链接到目标中。静态库会被完整地复制到目标中,因此目标文件会变大。

链接单独共享库和静态库的优势在于:

  1. 代码复用:通过链接库,可以将常用的功能封装到库中,提高代码的复用性和可维护性。
  2. 减小可执行文件的大小:使用共享库可以减小可执行文件的大小,节省存储空间。
  3. 动态更新:使用共享库可以实现动态更新,当库文件发生变化时,只需要替换库文件而不需要重新编译整个程序。
  4. 简化构建过程:通过使用CMake的target_link_libraries命令,可以简化构建过程,自动处理库的依赖关系。

以下是一些常见的应用场景和腾讯云相关产品:

  1. 应用场景:
    • 开发大型项目:CMake可以帮助管理复杂的项目结构和依赖关系,提高开发效率。
    • 跨平台开发:CMake支持多种操作系统和编译器,可以方便地进行跨平台开发。
    • 构建系统:CMake可以生成适用于各种构建系统的构建脚本,如Makefile、Ninja等。
  • 腾讯云相关产品:
    • 云服务器CVM:腾讯云提供了强大的云服务器CVM,可用于部署和运行CMake构建的应用程序。
    • 云原生容器服务TKE:腾讯云的云原生容器服务TKE可以帮助用户快速部署和管理容器化的应用程序,与CMake结合使用可以实现更高效的容器化部署。
    • 云函数SCF:腾讯云的云函数SCF提供了无服务器的计算能力,可以用于运行CMake构建的应用程序。

更多关于腾讯云产品的信息,请访问腾讯云官方网站:腾讯云

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

cmake链接静态-static-libstdc++问题

在嵌入式平台中,业务使用C语言开发,在交叉编译过程中会链接一个第三方的c++静态,该第三放使用了std,需要链接libstdc++的,由于所在的嵌入式平台中没有libstdc++.so,如果将libstdc...++.so拷贝板子上,需要占用5MB空间,很浪费空间,准备使用libstdc++的静态,在链接过程中出现如下问题;   整个业务的编译使用cmake构建,使用如下方式进行链接; add_executable...'libstdc++'的,在cmake中有链接-static-libstdc++,而且交叉工具链中是有libstdc++.a,当我们将cmake改为: add_executable(${target...'lstdc++'是gccg++都能识别,但是'-static-libstdc++'只有g++可以识别,而我的业务代码都是使用C语言编写的,在链接cmake默认使用的是gcc,但是gcc不能识别'-...static-libstdc++',最终不会链接到实际的libstdc++.a,所以在链接时出现不能识别std的问题; 知道原因了,就很好解决了,在链接阶段将cmake链接选项改为g++即可,添加如下一行就可以正常链接成功

6K51

cmake 添加头文件目录,链接动态、静态

cmake 添加头文件目录,链接动态、静态 cmake 添加头文件目录,链接动态、静态 1. 添加头文件目录INCLUDE_DIRECTORIES 2....env目录,而不是常见的/usr/、/usr/local等目录,使用cmake进行编译时需要注意头文件文件的目录的设置。...cmake 添加头文件目录,链接动态、静态 罗列一下cmake常用的命令。 CMake支持大写、小写、混合大小写的命令。 1....(myProject libcomm.a) # 显示指定链接静态 target_link_libraries(myProject libcomm.so) # 显示指定链接动态 # 再如: target_link_libraries...,链接动态、静态 cmake 链接动态链接 cmake 3.19官网帮助文档 Getting started with cmake CMake projects in Visual Studio Configure

23.6K11

cmake:动态链接(so)中静态链接tcmalloc(gperftools2.4)暨静态链接libstdc++

tcmalloc.a也可以以静态链接的方式加入应用程序中,大概因为使用太方便,网上关于这方面的介绍都是一笔带过,但是如果要在动态 (so)中静态编译tcmalloc,却是有所不同的。...于是我觉得用静态链接方式将tcmalloc编译到so中比较好,这样这个动态以比较独立的方式发行,不再依赖系统中是否安装了tcmalloclibunwind。...下面是我的CMakeLists.txt中关于静态连接tcmalloclibstdc++的代码。...(so的代码是以C++11写的,所以还要依赖于libstdc++,所以我打算把libstdc++也以静态方式连接到程序中) ##判断操作系统类型 if(CMAKE_SYSTEM_NAME MATCHES...总结 如果在可执行程序中静态链接tcmalloc时,用默认参数编译tcmalloc就好了,无需带-fPIC参数, 但是在动态(so)中静态链接tcmalloc,必须要用-fPIC重新编译tcmalloc

1.9K10

【Android NDK 开发】Android Studio 使用 CMake 导入静态 ( CMake 简介 | 构建脚本路径配置 | 引入静态 | 指定静态路径 | 链接动态 )

CMake 简介 II . Android Studio 中 CMake 引入静态流程 III . 指定 CMake 最小版本号 IV . 导入函数 ( 静态 / 动态 ) 编译配置 V ....Android Studio 中 CMake 引入静态流程 ---- Android Studio 中 CMake 引入静态流程 : 1 . build.gradle 配置 CMake 编译选项 :...CMake 构建脚本 CMakeList.txt 链接静态 : # 链接函数 # 参数 1 : 本构建脚本要生成的动态目 标 # 参数 2 ~ ... : 后面是之前预编译的动态静态...链接函数 ---- 链接函数 : 这里注意第一个参数必须是要生成的动态模块 ; # 链接函数 # 参数 1 : 本构建脚本要生成的动态目标 # 参数 2 ~ ... :.../jniLibs/armeabi-v7a") # 链接函数 # 参数 1 : 本构建脚本要生成的动态目 标 # 参数 2 ~ ... : 后面是之前预编译的动态静态

2.5K40

CMake静态顺序

前言 C/C++程序的许多同学被静态的依赖折腾,因为默认情况下要求被依赖的放在依赖它的后面,当一个程序或共享依赖的静态较多时,可能会陷入解决链接问题的坑中。...方法 以CMake为例,假设程序x依赖三个静态:libX1.a、libX2.alibX3.a,而libX2.a又依赖libX1.a,libX3.a依赖libX2.alibX1.a,正常情况下的.../abc -Wl,-rpath=/data/abc 部分库链接它的静态,部分库链接它的共享: -Wl,-static -lb -Wl,-call_shared -la -lz 指定链接器: -Wl,...,而另一些链接共享?...用“-Wl,-Bstatic”指定链接静态,使用“-Wl,-Bdynamic”指定链接共享,使用示例: -Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl

6.5K50

CMake 静态与动态构建

在前面一篇文章写了如何使用CMake编译“hello world”。这一篇写写构建静态动态。...上一文章链接:《CMake,大型项目采用的构建工具》 对于静态动态的了解,可以看看之前的文章: 静态:《静态链接的实现》 动态:《动态链接的实现》 在上一篇文章中,我们说了内部构建和外部构建的区别...$ cd lib $ ls CMakeFiles cmake_install.cmake librice.a Makefile $ 编译完,在lib目录下生成了librice.a这个静态。...安装共享和头文件:只需要对lib文件夹下的CMakeLists.txt增加install指令,如下: SET(LIBRICE_SRC rice.c) ADD_LIBRARY(rice SHARED...#查看共享是否安装成功 /usr/lib$ ls librice.so librice.so /usr/lib$ #查看头文件是否安装成功 /usr/include/rice$ ls rice.h

1.7K20

静态链接动态链接的区别

1、链接概述Linux下得有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。...动态而言:某个程序在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。...动态链接的加载方式有两种:隐式加载显示加载。注意:linux下进行连接的缺省操作是首先连接动态,也就是说,如果同时存在静态动态,不特别指定的话,将与动态相连接(见本文第四部分)。...2、静态链接下面就通过实际的例子来向大家演示一下,该怎样编译使用静态动态链接:2.1、编辑测试文件二个文件:add.c、 sub.c、add.h 、sub.h main.c/*add.h *...2、用ldd命令可以查看一个可执行程序依赖的共享

8K21

静态链接

同时所带来的好处在于,头文件文件相结合的访问机制。...文件用于程序的链接阶段,但编译器提供有 2 种实现链接的方式,分别是静态链接方式动态链接方式,其中采用静态链接方式实现链接操作的文件,称为静态链接;采用动态链接方式实现链接操作的文件,称为动态链接...本文将介绍静态链接静态链接简介 静态链接实现链接操作的方式很简单,即程序文件中哪里用到了文件中的功能模块,GCC 编译器就会将该模板代码直接复制到程序文件的适当位置,最终生成可执行文件。...直接在GCC参数里加上-static相应的静态链接即可。...-L(大写的 L)选项用于向 GCC 编译器指明静态链接的存储位置; -l(小写的 L)选项用于指明所需静态链接的名称,注意这里的名称指的是 xxx 部分,且建议将 -l xxx 直接连用(即

1.7K20

C语言 | 什么是静态链接动态链接

今天分享的是静态链接动态链接的相关知识,并且自己动手写一个简单的静态函数动态函数,来体验这个流程。 首先要从函数的发明开始说起。...这时候的解决方案就是以(主要有2种:静态动态)的形式来提供。 比较早出现的是静态链接。...商业公司通过发布.a文件.h头文件来提供静态给客户使用。动态链接静态链接出现的晚一些,效率更高一些,是改进型的。现在我们一般都是使用动态。...-fPIC是位置无关码,-shared是按照共享的方式来链接。...以上就是今天的内容,主要是介绍了函数的来源背景知识,以及静态链接动态链接的制作及使用方法。

4.3K40

Linux的静态共享详解及实例

在Linux下分为静态共享(也叫动态),当然Windows下也有静态(.lib)动态(.dll),这里主要是讲解Linux下的静态共享,以及它们的简单实现。        ...在Linux中静态以.a为后缀,首先静态的实现是在文件编译后的链接过程中就被载入到了程序中,那么后续的程序的运行使用就不会再依赖,那么弊端就是将静态载入到程序中会导致程序的体积变大,而且如果静态后续进行了更新...共享 对于一个共享来说,它可以有三个名字,虽然这不是必须的,但是对于有后续的版本的维护或者更新来说,最好是规范的使用这三个名字,可以极大的方便我们去维护更新共享。...通常我们都会将sonamelinkname分别与realname建立软连接,那么链接sonamelinkname实际上就是链接到了realname。...我们先在lib下建立一个linkname的软链接,然后再去编译main.cpp共享,其中-L参数后面跟你的共享的所在目录,-l后面跟的名称,因为我的是libmytest.so,所以我的的名称就是

3.3K20

Linux共享静态、动态详解

1、静态函数,是在程序执行前就加入到目标程序中去了 ; 2、动态函数共享函数是一个东西(在linux上叫共享对象, 文件后缀是.so ,windows上叫动态加载函数, 文件后缀是.dll)...静态函数现在已经不在像以前用得那么多了,主要是共享函数与之相比较有很多的优势的原因。慢慢地,大家都喜欢使用共享函数了。...理论上说,使用ELF格式的静态库函数生成的代码可以比使用共享函数(或者动态函数)的程序运行速度上快一些,大概1-5%。...),然后创建一个包含a.ob.o的共享函数。...最简单的方法是运行: ldconfig -n directory_with_shared_libraries 最后,当你编译你的程序时,你需要告诉链接器你正在使用的任何静态共享

8.8K10

【Linux】动静态以及动静态链接

静态与动静态链接 在Linux下共分为两种,一种是动态,另一种为静态。其实我们可以通过后缀就可以区分该是否为动态。...动态的命名一般为xxxlibx(这里的x是指语言).so,静态一般为:xxxlibx.a 动态与动态链接 感性理解 网吧(动态/共享) 我们可以将动态看作是学校附近的一个网吧,网吧里有很多的电脑...优点 因为动态是被共享的,具体的实现方式都是在库中,我们的程序中只有地址,会很大的节省空间。...静态静态链接 感性理解 感性理解就是将网吧里我们最喜欢的那台电脑给买回来,放在宿舍里供自己玩耍。...理性理解 静态专门让编译器对用户的程序进行静态链接,在链接时,将静态中所需要的完整代码给拷贝到自己的可执行程序内部中。

4.8K50

Linux下Qt创建共享链接共享详解

本次大家分享的是在Ubuntu下使用Qt生成共享以及在Qt中链接共享的方法。 共享是在Linux下的称呼,在Windows下被称为动态。...这块大家需要了解的是程序在编译时使用的程序在运行时使用的需要一致,不然程序可能会闪退。而且运行时的路径如果没有设置,那么系统就会在默认的路径下进行搜索,如果没找到程序直接就挂了。...②类型选择默认的共享,填写名称并选择工程路径。简单说下的类型分别是动态静态Qt的插件 ? ③选择默认的套件即可 ④选择所需模块,这里我没有勾选任何模块 ?...生成共享共享实现了计算两个整型数的功能,过于简单,莫要介意~ ① .h文件内容 #ifndef ADDLIB_H #define ADDLIB_H class AddLib { public...借助Qt添加 ①右键项目->添加 ? ②选择链接的类型,选择【外部】 ? ③选择链接的路径与平台等信息 ? ④ .pro中新增文件 unix:!

5.6K20

Linux gcc编译生成静态共享动态的过程

这篇文章主要通过实例演示在Linux下如何使用gcc分别编译生成静态动态文件以及其它程序如何使用这个生成的静态动态。...-lmyhello 注意:如果出现下面这个错误,那么是由于程序链接需要静态,系统没有安装静态导致报错: [root@typecodes howto_gen_static_lib]# gcc -o hello...如下图所示,使用ln -sf libmyhello.so.1 libmyhello.so命令创建链接到soname的共享文件名(Link Name):libmyhello.so。 ​...这里如果前面一样,直接链接创建的动态文件libmyhello.so生成可执行文件hello,然后直至执行hello,那么也会提示找不到链接的动态libmyhello.so: [root@typecodes.../lib、/lib64: 系统必备共享 /usr/lib、/usr/lib64: 标准共享静态 /usr/local/

48021
领券