Linux下编译一个静态链接的程序的注意点
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下编译一个静态链接的程序的注意点相关推荐
- Linux 下编译并运行C语言程序
Linux下编译并运行C语言程序 ,以Centos 系统为例 1>新建一个hello.c文件 可以直接用图形用户界面新建也可以使用命令新建. 用命令行的话,要用到Linux下的vi编辑器的相关命 ...
- Linux下动态链接库与静态链接库(编写、编译)
这里写目录标题 函数库的概念 动态库的编译 静态库的编译 动态库相对于静态库的优点和缺点 优点 缺点 函数库的概念 函数库一般分为静态库和动态库两种. 静态库: 是指编译链接时,把库文件的代码全部加入 ...
- linux 程序占内存,linux下,一个运行中的程序,究竟占用了多少内存
1. 在linux下,查看一个运行中的程序, 占用了多少内存, 通常的命令有php (1). ps aux:html 其中 VSZ(或VSS)列 表示,程序占用了多少虚拟内存.linux RSS列 ...
- vss2010c语言怎么运行,在Linux下使用gcc运行C语言程序
Linux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具.本教程毫不犹豫地使用GCC来编译C程序. ...
- Linux下编译连接mysql数据库
1.在Linux下编译连接mysql数据库的程序时,需要使用安装Mysql数据库时自带的mysql_config脚本.它会为你编译MySQL客户端,并连接到MySQL服务器提供有用的信息.需要使用下面 ...
- linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt
[2018年最新整理]linux下编译运行程序命令大全 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题 ...
- 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库文件. 安装 ...
- linux取消头文件链接,【原创】Linux下编译链接中常见问题总结
前言 一直以来对Linux下编译链接产生的问题没有好好重视起来,出现问题就度娘一下,很多时候的确是在搜索帮助下解决了BUG,但由于对原因不求甚解,没有细细研究,结果总是在遇到在BUG时弄得手忙脚乱得. ...
- Linux环境下编译并执行ava helloworld程序
http://blog.lupaworld.com/home-space-uid-24466-do-blog-id-2578.html 已经学会怎样在Windows下怎样编辑,编译和运行Java程序了 ...
最新文章
- LVS_DR实现(负载均衡)及LVS_DR+keepalived实现(高可用+负载均衡)
- Intellij-Cannot download Sources解决方法
- java新手笔记21 接口
- 基于visual Studio2013解决面试题之0601二叉树深度
- 老生常谈.优化linux内核参数
- JavaScript面向对象--封装
- 智能运维监管系统终端_什么系统能实现机房智能运维?
- shell中的变量与eval(转)
- 【codevs1087NOIP2003】麦森数,高精度+对数+快速幂
- 苦口之药的拼音及解释
- FPGA内部资源总结
- 老肖有话说:如期而至的Swarm新工具Crane开源解读
- 计算机组成原理唐朔飞第八章ppt,计算机组成原理唐朔飞课件
- PTA-寻找孪生素数
- ubuntu安装I219-LM网卡驱动
- 20道jQuery 常见的面试问题和答案
- Boost用法split
- 修复 FLASHMAIL 只能发不能收的问题
- 深深的码丨Java ArrayList 源码透析
- python和cc++哪个适合做游戏_分享一个C++与Python开发的中小型通用游戏服务端框架(跨平台,开源,适合MMORPG游戏)...