静态链接,即:在链接阶段,将源文件中用到的库函数与汇编生成的 .o 目标文件合并生成可执行文件。所以,静态链接方式的好处是:方便程序移植,因为可执行程序包含了所有库函数的内容,放在任何环境当中都可以执行。缺点就是:可执行文件通常会比较大。而且每次库文件升级的话,都要重新编译源文件,很不方便。 直观的看,一...
库有两种,一种是 静态链接库,一种是 动态链接库,不管是哪一种库,要使用它们,都要在程序中包含相应的 include 头文件。我们先来回顾一下程序编译的过程。如下图: 我们结合gcc指令来看一下每个阶段生成的文件: 1 gcc -c helloWorld.c 生成一个helloWorld.o文件,该文件是将源文件编译成的汇编文件,在链接之前,...
静态链接库通常是指以.a为后缀的文件,而动态链接库则常常以.so为后缀名。静态链接库其实就是把一个或多个目标文件(即编译生成的.o文件)归档在一个文件中。此后,当需要使用这个静态库中的某个功能时,将这个静态库与要生成的应用程序链接在一起。 ar工具 在Linux上平台上最常用的归档工具是GNU的tar,但是要构建...
下面我们用动态链接的方式编译test.cpp,输入: g++ -o test test.cpp -L./addlib -ladd 1. 该命令和刚刚静态链接一样。注意-l后面接的是lib与so中间的库名称。 我们执行一下: 发现不行,因为执行程序找不到libadd.so。 可以看到test执行程序用到的 libadd.so 没有找到。。。 原因是在 /etc/ld.so.conf...
-static代表使用静态链接库,-L.代表静态链接库搜索路径 .代表当前路径 3.3 动态编译可能存在的问题 使用如下命令进行编译,使用libmyhello.so动态链接库编译成一个hello的可执行文件 生成hello可执行文件,注意执行的时候可能会报错,说找不到这个 libmyhello.so文件,如果放在/lib或者/usr/lib下,那么默认就能找到,如果...
STATIC, 代表静态链接库,编译的时候link到工程中; SHARED,代表动态链接库,运行时候加载; MODULE,是一些插件,运行时候使用dlopen-like的功能进行动态加载; EXCLUDE_FROM_ALL会在目标文件上设置相应的属性(执行默认make的时候,这个目标文件会被排除在外,不被编译) ...
静态编译要把静态库文件打包编译到可执行程序中,动态编译不会把动态库文件打包编译到可执行程序中,它们只是编译链接关系。 二、制作静态库 首先看一个例子,有一下三个c语言文件,mylib.c、mylib.h、mytest.c。mylib.h做函数的声明,mylib.c做函数的定义,mytest.c做功能的测试。
库lib是编译好的二进制代码,可以被操作系统载入内存执行,一般是预先编译好的函数的集合,可以通过头文件链接到库文件,执行已经编译好的代码段。 库一般分为静态库(static lib,在linux系统一般是.a文件)和动态库(dynamic lib,也叫共享库,在linux系统一般是.so文件)。二者的不同点在于被载入的时间不同: ...
<lib_name> 是生成的库名,该库名可以看成一个变量,可以在其他地方通过库名进行引用 第二个参数 STATIC 可以设置生成的库的类型 动态库为SHARED 静态库为STATIC 剩下的参数是需要编译进库的源码 在src/CMakeLists.txt 中我们可以看到编译 myClass 为一个库 当代码有多个源代码之后,为了方便,我们将全部源代码添...
静态库:静态库在程序编译链接时,将库中用到的代码直接链接(或者说复制)到最终的可执行文件中。这意味着,一旦你的程序链接了静态库,那么即使在没有库文件的系统上,你的程序也能正常运行,因为它已经包含了所有需要的代码。然而,这也会导致你的可执行文件比链接动态库的版本大,因为它包含了所有的库代码。