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. LVS_DR实现(负载均衡)及LVS_DR+keepalived实现(高可用+负载均衡)
  2. Intellij-Cannot download Sources解决方法
  3. java新手笔记21 接口
  4. 基于visual Studio2013解决面试题之0601二叉树深度
  5. 老生常谈.优化linux内核参数
  6. JavaScript面向对象--封装
  7. 智能运维监管系统终端_什么系统能实现机房智能运维?
  8. shell中的变量与eval(转)
  9. 【codevs1087NOIP2003】麦森数,高精度+对数+快速幂
  10. 苦口之药的拼音及解释
  11. FPGA内部资源总结
  12. 老肖有话说:如期而至的Swarm新工具Crane开源解读
  13. 计算机组成原理唐朔飞第八章ppt,计算机组成原理唐朔飞课件
  14. PTA-寻找孪生素数
  15. ubuntu安装I219-LM网卡驱动
  16. 20道jQuery 常见的面试问题和答案
  17. Boost用法split
  18. 修复 FLASHMAIL 只能发不能收的问题
  19. 深深的码丨Java ArrayList 源码透析
  20. python和cc++哪个适合做游戏_分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)...

热门文章

  1. 港府拟修例禁止电子烟入口及销售 保障市民健康
  2. phpMyAdmin 4.4.0 beta1 发布,MySQL 管理工具
  3. Oracle数据库中调用Java类开发存储过程、函数的方法
  4. Android App截包工具
  5. 【教程】Cubieboard变苹果无线airplay音响
  6. numpy中的ogrid
  7. 未来编程语言的发展方向(1)
  8. 用 API 提取、写入指定网站的 Cookie - 回复 bangrj 的问题
  9. Java Web项目中解决中文乱码方法总结
  10. Spring【依赖注入】就是这么简单