2017-12-03 05:53
⁄ 工业·编程
⁄ 共 649字
如果想创建一个动态链接库,可以使用 GCC 的-shared选项。输入文件可以是源文件、汇编文件或者目标文件。
另外还得结合-fPIC选项。-fPIC 选项作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code);这样一来,产生的代码中就没有绝对地址了,全部使用相对地址,所以代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
例如,从...
GCC阅读全文
2017-11-27 05:47
⁄ 工业·编程
⁄ 共 576字
//main.c
int main()
{
test();
}
//test.c
#include <stdio.h>
void test()
{
printf("test\n");
}
1、将test.c与main.c转换为目标文件test.o,main.o:
gcc -c main.c test.c
2、将两者链接成可执行文件:
gcc test.o main.o -o liu
3、将test.o打包为动态库文件libtest.so:
gcc -fPIC -c test.c -o test.o
gcc --share test.o -o libtest.so
or:
gcc -fPIC -shared test.c -o libtest.so
4、将t...
GCC阅读全文
2017-11-20 05:36
⁄ 工业·编程
⁄ 共 1184字
首先说明:gcc 和 GCC 是两个不同的东西
GCC:GNU Compiler Collection(GNU 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。
gcc是GCC中的GUN C Compiler(C 编译器)
g++是GCC中的GUN C++ Compiler(C++编译器)
一个有趣的事实就是,就本质而言,gcc和g++并不是编译器,也不是编译器的集合,它们只是一种驱动器,根据参数中要编译的文件的类型,调用对应的GUN编译器而已,比如,用gcc编译一个c文...
g++, GCC, 区别阅读全文
2017-11-13 22:51
⁄ 工业·编程
⁄ 共 12554字
Public_fREe()
void public_fREe(Void_t* mem)
{
mstate ar_ptr; mchunkptr p;
/* chunk corresponding to mem */
void (*hook) (__malloc_ptr_t, __const __malloc_ptr_t)...
glibc, 源码阅读全文
2017-11-06 22:46
⁄ 工业·编程
⁄ 共 27601字
malloc()函数在源代码中使用宏定义为public_mALLOc()。public_mALLOc()函数只是简单的封装_int_malloc()函数,_int_malloc()函数才是内存分配的核心实现。
public_mALLOc()
Void_t* public_mALLOc(size_t bytes)
{
mstate ar_ptr;
Void_t *victim;
__malloc_ptr_t (*hook) (size_t, __const __malloc_ptr_t)
&...
glibc, 源码阅读全文
2017-10-30 22:03
⁄ 工业·编程
⁄ 共 289字
1.预处理
--E 1.宏替换 2.头文件展开 3.注释去掉 4.xxx.c -> xxx.i
2.编译
--S 1.xxx.i -> xxx.s 2.汇编文件
3.汇编
-C 1.xxxx.S -> xxx.O 2.二进制文件
4.链接
--o 1.xxx.O -> xxx(可执行文件)
gcc工作流程图
gcc常用参数
-v/ –version
-I 编译的时候指定头文件路径
-c 1.将汇编文件生成二进制文件,得到一个.O文件 2.源代码
-O 指定...
GCC, 原理阅读全文
2017-10-23 21:11
⁄ 工业·编程
⁄ 共 1188字
往往内核添加了一个功能, glibc 要花很久才会用上。本来linux 那边为这个功能是否进入内核已经吵半天了,glibc这边又要为是否使用这个内核新特性再次吵架半天 (glibc 不是 Linux 专有的,还得考虑 BSD (虽然人家也不用 glibc),SysV Windows(诶,这没办法),还有 sun 那消亡的 solaris , 还有, 自家的 Hurd。然后,总之,这样新特性让人的接受上。。。 太慢了。
说近点的,fnotify glibc还没有对应的包装函数呢,futex 和 NPTL...
glibc, linux阅读全文
2017-10-16 17:41
⁄ 工业·编程
⁄ 共 689字
ANSI C 是兼容各种操作系统的C标准。POSIX标准兼容了UNIX系统的C标准。
1.Glibc
glibc = GNU C Library
是GNU项(GNU Project)目,所实现的 C语言标准库(C standard library)。
目前,常见的桌面和服务器中的GNU/Linux类的系统中,都是用的这套C语言标准库。
其实现了常见的C库的函数,支持很多种系统平台,功能很全,但是也相对比较臃肿和庞大。
2.uClibc
一个小型的C语言标准库,主要用于嵌入式。
其最开始设计用于uClinux...
c标准, glibc阅读全文
2017-10-09 17:31
⁄ 工业·编程
⁄ 共 226字
C语言标准库 即ANSI C ,非常轻量,仅包含,数学函数,字符/字符串处理,io 等基本方面,处理目前的版本是c99
glibc库 即GNU c library,也是目前linux 平台的c 标准库,是 C语言标准库的超集,在其基础上增加了线程操作等扩展,其动态库位于/lib/libc.so.6,静态库位于/usr/lib/libc.a
gcc库 静态库:libgcc.a 动态库: libgcc_s.so 包含一些辅助运算(浮点运算,整数运算)的功能,以及实...
c标准, GCC, glibc阅读全文
2017-10-02 17:28
⁄ 工业·编程
⁄ 共 494字
C 标准主要由两部分组成,一部分描述C的语法,另一部分描述C标准库。C标准库定义了一组标准头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义。要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库,这样的实现才算符合C标准。不符合C标准的实现也是存在的,例如很多单片机的C 语言开发工具中只有C编译器而没有完整的C标准库.
在Linux平台上最广泛使用的C函数库是glibc,其中包括C标准库的实现,也包...
c标准, glibc阅读全文