`

程序的加载和链接

 
阅读更多

 

 

 

hello.h

 #ifndef HELLO_H
 #define HELLO_H

 void hello(const char *name);

 #endif //HELLO_H

 

hello.c

#include <stdio.h>
 
void hello(const char *name) {
    printf("Hello %s!\n", name);
}

 

main.c

#include "hello.h"
 
int main() {
    hello("everyone");
    return 0;
}

 

 

生成 .o 文件

gcc -c hello.c

 

 

 

生成静态库文件

ar cr libmyhello.a hello.o
gcc -o hello main.c -L. -lmyhello
./hello
Hello everyone!

 

 

 

 

生成动态库

gcc -shared -fPIC -o libmyshare.so hello.c
gcc -o hello main.c -L. -lmyhello
./hello
结果
./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory
用strace 运行hello能看到在指定目录下找不到文件,将libmyshare.so拷贝到/usr/lib64目录下
再运行./hello就正常了

 

 

 

 

 

 

一些相关的命令

名称 含义
ar 创建静态库,插入删除列出和提取成员
ldd 列出一个可执行文件在运行时所需要的共享库
gcc 强大的编译工具
nm 列出一个目标文件的符号表中定义的符号
size 列出目标文件中section的名字和大小
objdump

所有二进制工具之母

能够显示一个目标文件中所有的信息

最大的作用是反汇编.text 片段中的二进制指令

readelf

显示一个目标文件的完整结构

包括ELF头中编码的所有信息,包含size和nm的功能

strace 跟踪调试工具
strip 删除多余的段
objcopy 将一个目标文件中的内容拷贝到另一个中

 

 

 

 

 

参考

关于Linux静态库和动态库的分析

程序的编译链接过程

程序运行流程——链接、装载及执行

 

 

分享到:
评论

相关推荐

    微信小程序加载fbx模型

    得到了fbx模型的http链接,使其加载在小程序端,都是适配小程序版本的代码 其中three_new.js是小程序版的3D加载库文件 FBXLoader_new是小程序版本的fbx模型的加载器 inflate.min.js是小程序版的压缩解压库 model...

    java程序中加载动态链接库文件

    java程序中加载动态链接库文件方法,涉及到C语言实现控制底层硬件的方法

    链接器和加载器.PDF(链接器和加载器 Beta 2)

    由于那时内存很贵且容量有限,计算机的速度很慢(以今天的标准),为了创建复杂的内存覆盖策略(以将大容量的程序加载到小容量内存中),以及重新编辑先前链接过的文件(以节省重新创建程序的时间),这些链接器都...

    链接器和加载器 中文 扫描版 带详细书签 pdf

    《链接器和加载器》首先通过实例深入浅出地阐述了在不同的编译器和操作系统中链接和加载过程的差异。在这个基础上,作者提出了清晰实用的忠告,来帮助你创建更快、更清晰的代码。你将会学习如可规避和Windows DLL相关...

    链接器和加载器,完整扫描版

    《链接器和加载器》讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库,以及着眼于成熟...

    ELF文件的加载和动态链接过程

    大家对于Hello World程序应该非常熟悉,随便使用哪一种语言,即使还不熟悉的语言,写出一个Hello World程序应该毫不费力,但是如果让大家详细的说明这个程序加载和链接的过程,以及后续的符号动态解析过程,可能还会...

    链接器和加载器

    《链接器和加载器》讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库,以及着眼于成熟...

    PIC24 和 dsPIC33 系列微控制器的引导加载程序_C语言_代码_相关文件_下载

    提供一个相对易于使用的引导加载程序,与大多数 PIC24 和 DSPIC33 系列处理器兼容。此引导加载程序不使用中断,因此您的默认编译步骤只需对链接描述文件进行微小更改即可工作。 通信协议在 comm-protocol.rst 文档...

    链接器和加载器 中文版

    几乎从有计算机以来,链接器和加载器就是软件开发工具包中的一部分,因为他们是 允许使用模块(而不是一个单独的大文件)来构建程序的关键工具。 早在 1947 年,程序员们就开始使用原始的加载器:将程序的例程存储在多个...

    《链接器和加载器》(中文版).pdf

    几乎从有计算机以来,链接器和加载器就是软件开发工具包中的一部分,因为他们是允许使用模块(而不是一个单独的大文件)来构建程序的关键工具。

    链接器和加载器linkers and loaders

    课程通常对链接和加载都缺乏重视。这对于以前讨论Fortan,Pascal,C,和不使 用内存映射或共享库的操作系统而言可能是对的,但是现在就不那么正确了。 C++,Java和其它的面向对象语言需要更加完善的链接环境。使用...

    动态链接库输出函数的动态加载C++源代码程序小实例

    动态链接库输出函数的动态加载C++源代码程序小实例

    链接与加载详解

    链接与加载详解,链接与加载的知识是程序人员必须掌握的~

    链接与加载 英文版 深入原理 见解独到

    几乎从有计算机以来,链接器和加载器就是软件开发工具包中的一部分,因为他们是 允许使用模块(而不是一个单独的大文件)来构建程序的关键工具。 早在 1947 年,程序员们就开始使用原始的加载器:将程序的例程存储...

    微信小程序 图片加载(本地,网路)实例详解

    在微信小程序中,要显示一张图片,有两种图片加载方式: 加载本地图片 加载网络图片 加载本地图片 &lt;/image&gt; src=”/image/arrowright.png” 这句就是加载本地图片资源的。想想iOS中的加载本地图片,...

    链接器与加载器 linker and loader

    Linker and Loader (链接器与加载器)是一本深入描述程序的生成与加载过程以及程序与操作系统关系的书,对程序员提升专业素质大有裨益。

    DLL动态链接库实例,在MFC中隐式加载dll程序源码

    DLL动态链接库实例,在MFC中隐式加载dll程序源码

    动态链接库之动态加载

    利用VC++实现动态链接库动态加载的方式。文件中包含DLL文件的编写以及加载测试程序,需要的可以下载参考。内容简单,阅读性强!

    系统程序设计:动态链接库程序设计

    基于MFC编程: 1.创建一个动态链接库,在该动态链接库中添加一个...5.实现利用加载时动态链接的方法引用DLL中的导出函数; 6.实现使用运行时动态链接的方法引用DLL中的导出函数; 7.系统具备友好简洁的操作界面。 

    链接器与加载器

    本文介绍程序的链接与加载过程,可作为深入了解程序运行方面知识的参考。

Global site tag (gtag.js) - Google Analytics