随笔分类 -  编译链接

链接脚本
摘要:以前笔记里的东西,备忘 Linux连接脚本 连接脚本的基本命令是SECTIONS命令,它描述了输出文件的“映射图”:输出文件中各段、各文件怎么放置。一个SECTIONS命令内部包含一个或多个段,段(SECTIONS)是连接脚本的基本单元,它表示输入文件中的某部分怎么放置。 完整的连接脚本格式如下,它 阅读全文

posted @ 2022-03-26 20:42 sudochen 阅读(425) 评论(0) 推荐(0) 编辑

BIN文件和ELF文件
摘要:文件的内容 1. BIN文件是 raw binary 文件,这种文件只包含机器码。2. ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。所以ELF文件的体积比对应的BIN文件要大。 文件的执行 1. 执行raw binary很简单,只需要将程序加载到其起始 阅读全文

posted @ 2022-02-24 10:22 sudochen 阅读(671) 评论(0) 推荐(0) 编辑

链接脚本三篇博客
摘要:对于.lds文件,它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。虽然现在我还没怎么用它,但感觉还是挺重要的,有必要了解一下。 先看一下GNU官方网站上对.lds文件形式的完整描述: SECTIONS {...secname start BLOCK(align) (NOL 阅读全文

posted @ 2022-02-24 09:57 sudochen 阅读(481) 评论(0) 推荐(0) 编辑

build-target-host
摘要:我们需要在x86下编译一个运行于arm上的编译器gcc,这个gcc产生mips平台的目标代码。那么我们的配置方式是: --build=x86 --host=arm --target=mips (仅是示意,方便理解,具体写法请google) 阅读全文

posted @ 2022-02-24 09:52 sudochen 阅读(24) 评论(0) 推荐(0) 编辑

采用dlopen,dlsym,dlclose加载动态链接库
摘要:本文为网上转载,出处已经找不到了,如果侵权,请联系删除 1、前言 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及 阅读全文

posted @ 2022-02-24 09:25 sudochen 阅读(109) 评论(0) 推荐(0) 编辑

Linux动态库符号导出
摘要:Linux如果不设置参数编译动态库,默认所有的非static函数是向外导出的,如果我们只需要部分函数应该如下: so.cpp如下: 1 #include <stdio.h> 2 #include "so.h" 3 4 5 void test() 6 { 7 printf("test\n"); 8 } 阅读全文

posted @ 2020-11-26 09:42 sudochen 阅读(223) 评论(0) 推荐(0) 编辑

系统符号表意义
摘要:nm 指令T 表示全局符合,t 表示本地符合,不对外U 表示调用的外部符号readelf -S Num Value Size Type Bind Vis Ndx Name0 Type字段:FUNC:表示函数OBJECT表示数据Bind字段:LOCAL表示本地GLOBAL表示全局WEAK表示需函数Nd 阅读全文

posted @ 2020-11-26 09:37 sudochen 阅读(301) 评论(0) 推荐(0) 编辑

静态库打包成动态库
摘要:最近打包SDK, 需要把多个*.so文件合并。 *.so文件不能直接合并,因为其中已经没有重定向信息。但多个静态库文件是可以合并成一个动态库文件的。 解决办法: 先把所有要打包的库编译生成静态库,然后使用如下命令把它们合并成一个*.so:gcc -shared -o c.so -Wl,--whole 阅读全文

posted @ 2019-12-25 09:52 sudochen 阅读(2733) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示