当前位置: 首页 > 面试题库 >

我需要静态库来静态链接吗?

郭璞
2023-03-14
问题内容

在Linux上的“ C”上,

我需要静态库来静态链接,还是需要足够的共享库?如果没有,为什么不呢?(它们不包含相同的数据吗?)


问题答案:

是的,您需要静态库来构建静态链接的可执行文件。

静态库是编译对象的捆绑包。静态链接到库时,实际上与获取该库的编译结果,将它们解压缩到当前项目中以及将它们当作自己的对象使用一样。

动态库已链接。这意味着一些信息,例如重定位,已经被修复并丢弃。

此外,动态库必须编译为与位置无关的代码。这不是对静态库的限制,并且会导致某些常见平台(例如x86)在性能上的显着差异。

存在诸如ELF
Statifier之
类的工具,这些工具试图将动态链接的库捆绑到一个动态链接的可执行文件中,但是很难在所有情况下都生成正确的工作结果。



 类似资料:
  • 使用clang链接AFN .a静态库 AFN静态库的生成不是重点, 以链接使用为主 一、准备 在staticLib文件夹下新建test.m文件, 代码如下 #import <Foundation/Foundation.h> #import <AFNetworking.h> int main() { AFHTTPSessionManager *manager = [AFHTTPSe

  • 主要内容:静态链接库,动态链接库,总结我们知道,C、C++程序从源文件到生成可执行文件需经历 4 个阶段,分别为预处理、编译、汇编和链接,本节将重点围绕链接阶段,对静态链接库和动态链接库做详细的讲解。 有关链接操作的具体细节,感兴趣的读者可阅读《 到底什么是链接,它起到了什么作用?》和《 符号——链接的粘合剂》这两节。总的来说链接阶段要完成的工作,就是将同一项目中各源文件生成的目标文件以及程序中用到的库文件整合为一个可执行文件。 通过

  • 问题内容: Java 8之前的Java版本要求本机代码必须位于共享库中,但是我已经读到Java 8可以在JNI中使用静态链接库。我已经搜索了示例,但找不到任何示例。 如何将JNI库静态链接到Java应用程序? 问题答案: Java SE 8规范已更改为支持静态链接,并且静态链接在JDK中实现。在System.loadLibrary的规范中对此进行了简要介绍。它所引用的JNI规范的各个部分在此处和此

  • 静态链接方法:静态链接的时候,载入代码就会把程序会用到的动态代码或动态代码的地址确定下来 静态库的链接可以使用静态链接,动态链接库也可以使用这种方法链接导入库 动态链接方法:使用这种方式的程序并不在一开始就完成动态链接,而是直到真正调用动态库代码时,载入程序才计算(被调用的那部分)动态代码的逻辑地址,然后等到某个时候,程序又需要调用另外某块动态代码时,载入程序又去计算这部分代码的逻辑地址,所以,这

  • 在编译Linux程序时,我们经常会看到动态链接和静态链接这两个术语。这两个术语中是我Linux的共享函数库(shared libraries)相关的。共享函数库就象Windows系统里的.dll文件,它里面包含有很多程序常用的函数。为了方便程序开发和减少程序的冗余,程序当中就不用包含每个常用函数的拷贝,只是在需要时调用系统中共享函数库中常函数功能即可。这种方式我们称之为动态链接(Dynamical

  • 问题内容: 我在Linux,GCC中使用Boost库。安装和构建Boost之后,我发现使用Regex和Thread的程序使用共享的Boost库。就我的目的而言,我需要静态链接。如何更改链接类型?我应该重新构建Boost,还是可以通过在自己的项目或Boost配置文件中定义一些常量来设置链接类型? 问题答案: 只需添加到您的构建调用即可。这是一个简单的示例会话: 请注意,静态二进制文件的大小为1.5m