程序员的自我修养--链接、装载与库笔记:静态链接

1. 空间与地址分配 对于链接器来说,整个链接过程中,它就是将几个输入目标文件加工后合并成一个输出文件。测试代码a.c和b.c内容如下: // a.c extern int shared; int main() { int a = 100; swap(&a, &...

2019-04-14 16:59:20

阅读数 151

评论数 0

程序员的自我修养--链接、装载与库笔记:目标文件里有什么

编译器编译源代码后生成的文件叫做目标文件。目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。可执行文件格式涵盖了程序的编译、链接、装载和执行的各个方面...

2019-03-31 18:25:46

阅读数 122

评论数 0

程序员的自我修养--链接、装载与库笔记:编译和链接

集成开发环境(IDE),如Visual Studio,一般都将编译和链接的过程一步完成,通常将这种编译和链接合并到一起的过程称为构建(Build)。 1. 被隐藏了的过程 以下是测试代码hello.c: #include <stdio.h> int main(...

2019-03-20 21:30:43

阅读数 140

评论数 0

GCC中通过--wrap选项使用包装函数

在使用GCC编译器时,如果不想工程使用系统的库函数,例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free, new/delete函数,可以有两种方法: (1). 使用LD_PRELOAD环境变量:可以设置共享库的路径,并且该库将在任何其它库之前加载,即这个动态库中符号优...

2018-10-05 22:35:01

阅读数 1075

评论数 0

GCC编译选项参数介绍

        gcc和g++分别是gnu的c和c++编译器,下面是整理的常用编译选项参数:#(1). -x: 设定文件所使用的语言,使文件后缀名无效,如下,执行完后生成test.o gcc -c -x c++ test.jpg #(2). -c: 只编译生成目标文件即*.o,只编译不链接生成可执...

2018-07-08 17:30:36

阅读数 2286

评论数 0

C语言中的弱符号与强符号介绍

        弱符号(Weak symbol)是链接器(ld)在生成ELF(Executable and Linkable Format,缩写为ELF,可执行和可链接格式,是一种用于可执行文件、目标文件、共享库和核心转储的标准文件格式。ELF文件有两种索引:程序标头中记载了运行时所需的段,而段首...

2018-06-30 21:52:58

阅读数 1519

评论数 0

LLVM简介

        LLVM命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写,但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用。LLVM开始于2000年,是由C++实现的开源软件,它的license是”UIUC” ...

2018-06-16 21:01:04

阅读数 2024

评论数 0

编译器GCC与Clang的异同

编译器GCC与Clang的异同

2018-02-04 13:24:19

阅读数 22456

评论数 0

Linux下__attribute__((visibility ("default")))的使用

在Linux下动态库(.so)中,通过GCC的C++ visibility属性可以控制共享文件导出符号。在GCC 4.0及以上版本中,有个visibility属性,可见属性可以应用到函数、变量、模板以及C++类。 限制符号可见性的原因:从动态库中尽可能少地输出符号是一个好的实践经验。输出一个受限...

2017-12-26 09:05:45

阅读数 7069

评论数 7

Ubuntu14.04 LTS中升级gcc/g++版本到4.9.4的操作步骤

Ubuntu14.04 LTS中默认的gcc/g++版本为4.8.4,如下图,在C++11中增加了对正则表达式的支持,但是好像到gcc/g++ 4.9.2版本才会对正则表达式能很好的支持,这里介绍下Ubuntu14.04 LTS升级gcc/g++版本到4.9.4的操作步骤: 1.  依次执行...

2017-03-12 11:56:44

阅读数 5578

评论数 3

Ubuntu下makefile及gcc生成静态库动态库的简单使用举例

环境:Ubuntu-13.10  32位(虚拟机)、gcc4.8.1          首先创建一个test_makefile_gcc文件夹,此test_makefile_gcc文件夹下包括:src文件夹用于存放源文件; include文件夹用于存放头文件;bin文件夹用于存放生成的动态库.so...

2014-01-08 10:45:15

阅读数 8951

评论数 10

提示
确定要删除当前文章?
取消 删除