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

CMake静态顺序

前言 C/C++程序的许多同学被静态的依赖折腾,因为默认情况下要求被依赖的放在依赖它的后面,当一个程序或共享依赖的静态较多时,可能会陷入解决链接问题的坑中。...如果对静态不熟悉,需要结构nm等工具来解决顺序问题。...但也可以偷懒,不关心静态的顺序问题,ld为此提供了start-group和end-group两个选项,让包含在这两者间的静态顺序可以随意。...方法 以CMake为例,假设程序x依赖三个静态:libX1.a、libX2.a和libX3.a,而libX2.a又依赖libX1.a,libX3.a依赖libX2.a和libX1.a,正常情况下的...在链接静态时,如果多个静态之间存在依赖关系,则有依赖关系的静态之间存在顺序问题,这个在使用静态时需要注意,否则会报符号找不到问题。

6.6K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CMake 静态与动态构建

    在前面一篇文章写了如何使用CMake编译“hello world”。这一篇写写构建静态和动态。...上一文章链接:《CMake,大型项目采用的构建工具》 对于静态和动态的了解,可以看看之前的文章: 静态:《静态链接的实现》 动态:《动态链接的实现》 在上一篇文章中,我们说了内部构建和外部构建的区别...$ cd lib $ ls CMakeFiles cmake_install.cmake librice.a Makefile $ 编译完,在lib目录下生成了librice.a这个静态。...STATIC,静态 MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待。...EXCLUDE_FROM_ALL,参数的意思是这个不会被默认构建,除非有其他的组件依赖或者手工构建。 根据ADD_LIBRARY指令的描述,在上面的例子中,很清楚的理解是生成静态的操作。

    1.7K20

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

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

    6.4K51

    【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 ( add ) : 设置引入的静态名称 # ② 参数 2 ( SHARED...CMake 构建脚本 CMakeList.txt 链接静态 : # 链接函数 # 参数 1 : 本构建脚本要生成的动态目 标 # 参数 2 ~ ... : 后面是之前预编译的动态静态...博客资源 ---- CSDN 博客地址 : 【Android NDK 开发】Android Studio 使用 CMake 导入静态 ( CMake 简介 | 构建脚本路径配置 | 引入静态 | 指定静态路径

    2.7K40

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

    cmake 添加头文件目录,链接动态、静态 cmake 添加头文件目录,链接动态、静态 1. 添加头文件目录INCLUDE_DIRECTORIES 2....为工程生成目标文件 7.最后贴一个完整的例子 参考资料 最近需要将Windows10系统下使用VS2017编译的VC++项目放到CentOS Linux服务器上跑,最简单的当然是使用cmake作为项目编译和管理工具了...cmake 添加头文件目录,链接动态、静态 罗列一下cmake常用的命令。 CMake支持大写、小写、混合大小写的命令。 1....,链接动态、静态 cmake 链接动态链接 cmake 3.19官网帮助文档 Getting started with cmake CMake projects in Visual Studio Configure...builds using CMake A Step-By-Step Guide to Install CMake on Linux

    24.3K11

    Linux】动静态

    @TOC 动静态 1....设计 分为 静态(.a)和动态(.so) 的命名 以c++的为例 输入 ls /lib64/libstdc++* 以lib开头要去除 的真实名字为 stdc++ ---- 一般云服务器...,默认只会存在动态,不需要动态静态需要单独安装 myadd.h 实现一个加法的声明 #pragma once int myadd(int d1,int d2); ---- myadd.c...静态打包 只有一个.o的压缩包 tar - c :创建一个新的归档文件即压缩包 tar- r : 若.c文件修改了,则对一个或者多个.o文件做替换 ---- 当前目录下包含 mylib otherperson...+标准的,所以被认为是第三方 ---- 告诉它需要链接mymath,就可以正常运行了,而不需要告诉头文件 将下载下来的和头文件,拷贝到系统默认路径下,这个行为就叫做在Linux下安装 对于任何软件而言

    2.4K30

    Linux】动静态

    hello,大家好,今天我们继续学习Linux中的动静态,我们将从不同的角度来学习如何使用,并如何制作一个可供他人使用的动静态文件,并试着探究一下动态加载问题。那我们就开始学习吧!!...另外对于C/C++来说其的名称也是有规范要求的,例如在Linux下:一般要求是lib + 的真实名称 +(版本号)+ .so /.a + (版本号),版本号是可以省略不写的。...那么,Linux下的在什么位置呢? 如上便是我们使用所要吧包含的所有的头文件。 接下来,我们回答几个问题: 问:1....三.实现动静态 静态(.a):程序在编译链接的时候把的代码链接到可执行文件中。程序运行的时候将不再需要静态。...我们为什么可以在Linux下敲C语言代码呢?这是因为系统中有C语言所需的头文件和文件。 交付:将形成的归档文件和匹配的头文件都传给别人。

    8310

    Linux静态和动态

    静态 一、静态 1. 静态概念 静态(.a):程序在编译链接的时候把的代码链接到可执行文件中。程序运行的时候将不再需要静态。 2....使用静态 (1)朴素方法 — 直接使用 上面我们可以形成静态了,那么我们该如何使用别人的静态呢?...(2)使用打包好的静态 我们在上面已经生成了一个打包好的静态,现在我们将该压缩文件拿到用户这里: 然后对该压缩文件进行解压: 如上,我们就把静态拿到手了。...另外,如果别人给我们的中既包含动态也包含静态,即同一个中提供动静态两种,gcc 默认使用动态!...首先我们要知道,在 Linux 下,形成的可执行程序是 ELF 格式的可执行程序,它其中包含有一张类似于符号表的东西,里面包含各种函数依赖的以及地址,符号表就是动态链接这些动态的。

    55410

    Linux静态和动态

    Linux为什么不允许普通用户给目录建立硬链接呢? 系统层面上有.和…硬链接指向目录。...一、动态静态 具体的动态静态的相关内容点击跳转 Linux一般分为动态静态静态(.a):文件以.a为后缀,程序在编译链接的时候把的代码链接到可执行文件中。...程序运行的时候将不再需要静态 动态(.so):文件以.so为后缀,程序在运行的时候才去链接动态的代码,多个程序共享使用的代码。...究竟是动静态,取决你提供的是动态还是静态。.../etc/ld.so.conf.d/,ldconfig更新 4.创建软链接 ---- 五、动静态的加载 静态不需要加载,静态把代码拷贝到可执行程序里,直接决定了当加载的时候在内存里代码和数据可能存在多份

    28830

    linux 动态 静态_静态库里面包含动态

    动态静态 文件系统补完 文件的三个时间acm 动态静态 动态链接与静态链接 静态与动态静态的对比 生成静态 打包静态 使用静态 生成动态 打包动态 使用动态 文件系统补完...可以使用:1.,包括静态与动态。2.开源代码。3.基本的网络功能调用,比如各种网络接口、语音识别等等。 这其中,我们将详细介绍静态和动态。...动态是动态链接生成的,而静态静态链接生成的。...静态与动态 一般的命名方式为lib+的名字+.a比如C语言提供的标准静态名字就是libc.a。 静态是指程序在编译链接的时候把的代码链接到可执行文件中。...生成静态 我们为什么会制作呢?一般是想让别人能够使用我们实现的功能,但又不暴露自己的源代码才会打包。那么接下来我们来学习如何打包静态

    7.4K20

    Linux共享静态、动态详解

    1、静态函数,是在程序执行前就加入到目标程序中去了 ; 2、动态函数同共享函数是一个东西(在linux上叫共享对象, 文件后缀是.so ,windows上叫动态加载函数, 文件后缀是.dll)...静态函数 静态函数实际上就是简单的一个普通的目标文件的集合,一般来说习惯用“.a”作为文件的后缀。可以用ar这个程序来产生静态函数文件。Ar是archiver的缩写。...静态函数对开发者来说还是很有用的,例如你想把自己提供的函数给别人使用,但是又想对函数的源代码进行保密,你就可以给别人提供一个静态函数文件。...创建一个静态函数文件,或者往一个已经存在地静态函数文件添加新的目标代码,可以用下面的命令: ar rcs my_library.a file1.o file2.o 这个例子中是把目标代码...在用ar命令创建静态库函数的时候,还有其他一些可以选择的参数,可以参加ar的使用帮助。这里不再赘述。 一旦你创建了一个静态函数,你可以使用它了。

    8.8K11

    linux动态静态的使用_静态的使用

    文章目录 动静态的基本原理 认识动静态静态各自的特征 静态的打包与使用 打包 使用 动态的打包与使用 打包 使用 动静态的基本原理 动静态的本质是可执行程序的“半成品...认识动静态Linux下创建文件编写以下代码,并生成可执行程序。...在Linux下,我们可以通过ldd 文件名来查看一个可执行程序所依赖的文件。...此时我们可以看到,libc-2.17.so实际上就是一个共享的目标文件,准确来说,这还是一个动态。 在Linux当中,以.so为后缀的是动态,以.a为后缀的是静态。...动静态各自的特征 静态 静态是程序在编译链接的时候把的代码复制到可执行文件当中的,生成的可执行程序在运行的时候将不再需要静态,因此使用静态生成的可执行程序的大小一般比较大。

    4.8K20

    Linux静态与动态加载

    Linux当中,以.so为后缀的是动态,以.a为后缀的是静态。 在Windows当中,以.dll为后缀的是动态,以.lib为后缀的是静态。 认识了动态,那静态,又是什么呢?...动态是和目标文件链接,具体怎么链接下面会讲,而静态确不同,静态是在编译的时候,将中的代码直接拷贝到目标文件中,这就导致了我们最终形成的目标文件会很大,但优势在于形成了可执行程序后,该可执行程序可独立运行...,不再需要,但动态不行,在日常我们都会使用动态,很少使用静态。...-r(replace):若静态文件当中的目标文件有更新,则用新的目标文件替换旧的目标文件。 -c(create):建立静态文件。...注意上面我打包了两个,虽然看后缀一个静态,一个动态,但是其实上述的都是静态linux不是单单通过后缀来判断一个的类型,下面就来看看如何真正打包一个动态吧。

    16110

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

    这是因为Linux系统默认携带了语言级别的头文件以及语言所对应的。...动静态与动静态链接 在Linux下共分为两种,一种是动态,另一种为静态。其实我们可以通过后缀就可以区分该是否为动态。...静态静态链接 感性理解 感性理解就是将网吧里我们最喜欢的那台电脑给买回来,放在宿舍里供自己玩耍。...理性理解 静态专门让编译器对用户的程序进行静态链接,在链接时,将静态中所需要的完整代码给拷贝到自己的可执行程序内部中。...就好比将网吧里想要的那台电脑给买回宿舍,会很大的占用我们的私人空间(Linux中默认的方式为动态链接,当然我们可以用gcc/g++编译时使用-static的命令,来实现以静态链接的方式运行。)

    4.8K50
    领券