1. ld的-static开关加上之后,就可以编译出一个静态链接的程序了。要注意该程序用到的所有的库,都要有相应的.a版本,编译的时候作为一个source file放到命令行中即可。光有库的.so没用,需要重新编译该库,让它生成.a文件。
2. 要注意ld的一个特性:当ld查找一个symbol的时候,ld只会往后查找,不会往前查找。比如程序以来两个库A和B,而A库又调用了B库中的函数,那 么编译的时候,在命令行上,A库文件要出现在B库文件的前面。当ld发现A库中某个函数找不到时,他就会往后查找,于是在B库中找到了这个函数,OK。如 果AB两个库互相依赖,那么一般命令行中要写成A B A或B A B这样的格式。这就是为什么也会经常看到命令行中有重复出现相同库的原因。比如A B A这种情况,当ld发现A中有个函数undefined时,往后查找,在B中找到了,OK;继续在B中发现一个函数undefined,也往后找,在A中 找到了该函数,然后也OK了。
3. 当不知道哪个函数在哪个.a中的时候,用objdump -t <filepath>|grep xxx来查找即可。注意看objdump的manual,不是grep出了东西就一定表示该库中有这个函数,还要看前面的flag。

还有一个非常重要的内容:在一个静态链接的程序中,不能出现dlopen函数调用,看下面:

The dlopen/() function is available only to a dynamically-linked process. A statically-linked process (one where libc is linked statically) can't call dlopen() because a statically-linked executable:

* doesn't export any of its symbols
* can't export the required structure for libraries to link against
* can't fill structures at startup needed to load subsequent shared objects.

看看此文是不是一个情况:http://www.cnblogs.com/super119/archive/2011/03/06/1972333.html

转载于:https://www.cnblogs.com/super119/archive/2011/03/26/1996124.html

Linux下编译一个静态链接的程序的注意点相关推荐

  1. Linux 下编译并运行C语言程序

    Linux下编译并运行C语言程序 ,以Centos 系统为例 1>新建一个hello.c文件 可以直接用图形用户界面新建也可以使用命令新建. 用命令行的话,要用到Linux下的vi编辑器的相关命 ...

  2. Linux下动态链接库与静态链接库(编写、编译)

    这里写目录标题 函数库的概念 动态库的编译 静态库的编译 动态库相对于静态库的优点和缺点 优点 缺点 函数库的概念 函数库一般分为静态库和动态库两种. 静态库: 是指编译链接时,把库文件的代码全部加入 ...

  3. linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存

    1. 在linux下,查看一个运行中的程序, 占用了多少内存, 通常的命令有php (1). ps aux:html 其中  VSZ(或VSS)列 表示,程序占用了多少虚拟内存.linux RSS列 ...

  4. vss2010c语言怎么运行,在Linux下使用gcc运行C语言程序

    Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具.本教程毫不犹豫地使用GCC来编译C程序. ...

  5. Linux下编译连接mysql数据库

    1.在Linux下编译连接mysql数据库的程序时,需要使用安装Mysql数据库时自带的mysql_config脚本.它会为你编译MySQL客户端,并连接到MySQL服务器提供有用的信息.需要使用下面 ...

  6. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt

    [2018年最新整理]linux下编译运行程序命令大全 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题 ...

  7. Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...

  8. linux取消头文件链接,【原创】Linux下编译链接中常见问题总结

    前言 一直以来对Linux下编译链接产生的问题没有好好重视起来,出现问题就度娘一下,很多时候的确是在搜索帮助下解决了BUG,但由于对原因不求甚解,没有细细研究,结果总是在遇到在BUG时弄得手忙脚乱得. ...

  9. Linux环境下编译并执行ava helloworld程序

    http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java程序了 ...

最新文章

  1. 黑白球JAVA_桶中取黑白球 - jiacut的个人页面 - OSCHINA - 中文开源技术交流社区
  2. [转载]java中Date,SimpleDateFormat
  3. Struts2自定义拦截器实例—登陆权限验证
  4. 论文笔记:[ICLR 2020] Tips for prospective and early-stage PhD students
  5. MATLAB 使用CNN拟合回归模型预测手写数字的旋转角度(卷积神经网络)
  6. 腾讯Techo开发者大会揭晓云存储发展趋向:高性能、高可用、高性价比
  7. Android开发笔记(八十一)屏幕规格适配
  8. matlab怎么更改图形窗口的句柄值,matlab图形句柄属性
  9. 区块链 以太坊 solidity 事务控制和异常处理 require assert
  10. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_2_使用Stream流的方式,遍历集合...
  11. 猿创征文|C++软件开发值得推荐的十大高效软件分析工具
  12. Oracle查看表空间及使用情况
  13. SI 9000 及阻抗匹配学习笔记(三)
  14. 进程调度算法的模拟实现
  15. VSCode使用TSLlint校验TS代码
  16. jqwidgets简单技术
  17. DCOS快速部署手册
  18. html是网页病毒吗,无弹窗浏览器 目前最具效果性的防网页病毒软件
  19. Nacos默认用户名和密码
  20. Doris(一)-简介、架构、编译、安装和数据表的基本使用

热门文章

  1. 分布式消息通信ActiveMQ原理-持久化策略-笔记
  2. 直播源码和短视频源码,相亲相爱的一家人
  3. 苹果手机(ios)拍照上传图片旋转90度问题---java后台处理
  4. 《Android传感器开发与智能设备案例实战》——第2章,第2.4节安装ADT
  5. 【负载均衡】揭开F5 BIG-IP的神秘面纱(一)
  6. 适合于小团队产品迭代的APP测试流程
  7. 一寸、两寸证件照photoshop批处理动作
  8. 基于Tomcat5.0和Axis2开发Web Service代码详解
  9. 使用Hexo搭建个人博客网站
  10. 通过Anaconda在Ubuntu16.04上安装 TensorFlow(GPU版本)