我正在部署一个用gcc 4.3.2-1.1(Debian)编译的小程序。该程序将部署在从Debain
5到最新的Fedora,Ubuntu,Slackware,Arch等虚拟机模板上。
该程序取决于Xen库中的某些符号,这些符号仅在不稳定的树中可用。因此,通过相应的程序包管理器在虚拟机模板上安装Xen的库无法解决我的直接问题。
在打包这些库的自己的版本之前,需要静态链接可执行文件。
默认情况下,gcc 4.3-x是否仅包括静态链接时实际 使用的 符号,还是我应该将其他优化标志传递给链接器?我知道静态链接是不好的,我只是在做临时工作。
这个问题不仅与gcc有关,而且与ld(1)也有关。
默认情况下,gcc不会消除无效代码,您可以通过编译/链接可执行文件然后运行来进行检查
objdump -d a.out
它显示了可执行文件中的所有功能。
简单的“搜索”就给出了此链接。
因此,要删除未使用的功能,您需要:
主要内容:静态链接库,动态链接库,总结我们知道,C、C++程序从源文件到生成可执行文件需经历 4 个阶段,分别为预处理、编译、汇编和链接,本节将重点围绕链接阶段,对静态链接库和动态链接库做详细的讲解。 有关链接操作的具体细节,感兴趣的读者可阅读《 到底什么是链接,它起到了什么作用?》和《 符号——链接的粘合剂》这两节。总的来说链接阶段要完成的工作,就是将同一项目中各源文件生成的目标文件以及程序中用到的库文件整合为一个可执行文件。 通过
问题内容: 如何在gcc中静态链接共享库函数? 问题答案: 参考: http://www.linuxquestions.org/questions/linux-newbie-8/forcing-static- linking-of-shared- libraries-696714/ http://linux.derkeiler.com/Newsgroups/comp.os.linux.develo
问题内容: 我使用的C ++库可以构建为共享库或静态库。该库使用一种工厂技术,该技术在程序启动时创建静态对象并注册静态对象。 只要使用共享库,此方法就可以正常工作。使用静态版本时,所有静态对象都不会包含在最终程序中(因为它们没有被直接引用),因此它们的功能不可用。 有没有一种方法可以在链接时强制gcc包含库中的所有静态对象? 该库是开源的,如果有帮助,我可以对其进行修改。 问题答案: 您可以使用,
问题内容: 我想编译NRPE,因此可以将编译后的二进制文件复制到不希望安装gcc的OmniOS服务器上。我希望从存储库中安装具有SSl支持的NRPE,但是这种接缝不存在,所以我想自己编译它。但是,脚本不包含它所接缝的静态选项 题 如何编译静态使用的程序? 问题答案: 尝试这个:
问题内容: 我正在尝试使用gcc从Ubuntu上的编译简单的C示例。我必须用作gcc的参数以包含所需的库吗? 问题答案: 如果您使用,等获取库(相对于从源构建库),则仅安装软件包还是 _也_安装了获取头文件?Linux软件包通常将运行时库与编译时标头分开。这样,只需要库来满足动态链接的人就不必安装不需要的标头。但是,由于您要进行开发,因此需要这些标头,因此也需要该包。
问题内容: 我一直在尝试将Obj-C库移植到Swift,但是遇到了一个问题,当Swift代码在项目中时,链接器无法构建静态库。 作为最小的复制者,请进入XCode6并创建一个新的iOS静态库。它会为您提供一个带有空白.h和.m文件的项目。这样可以编译良好。然后,将新的.swift文件添加到项目中(无论是否创建标题桥)。这也 应该 编译良好,但是在链接期间失败: 如果我瞄准模拟器或设备,则会发生这种