gcc生成静态链接库与动态链接库步骤,并链接生成可执行文件的简单示例

  1. 编写 mylib.h

    void test();
  2. 编写 mylib.c
    #include<stdio.h>
    void test(){
        printf("hello world");
    }
  3. 生成目标文件 mylib.o
    gcc -c mylib.c

  4. 归档生成 libmy.a
    • 格式: ar –rc lib[name].a libname.o

    ar -rc libmy.a mylib.o

  5. 编写测试程序 main.c
    #include<mylib.h>
    int main(){
        test();
        return 0;
    }
  6. 编译生成 main.o
    gcc -c main.c -o main.o -I ./

  7. 最后一步链接生成可执行程序
    gcc -L ./ -lmy main.o -o main

  8. 执行生成的可执行文件main
    ./main

  9. 最终完成的目录结构
.
├── libmy.a     最终生成的静态库
├── main        可执行程序
├── main.c      测试代码
├── main.o      测试代码的编译结果
├── mylib.c     静态库的定义代码
├── mylib.h     静态库的头文件
└── mylib.o     静态库的编译结果

0 directories, 7 files

使用上面示例创建动态链接库

gcc -fpic -shared -o libmy.so mylib.c

链接动态库生成可执行程序

gcc -L ./ -lmy main.c -I ./ -o main2

执行

./main2

如果报错

./main2: error while loading shared libraries: libmy.so: cannot open shared object file: No such file or directory
  • 原因:使用动态链接库的程序运行时,要做一下设置,否则应用程序会报找不到动态库的错误
  • 解决方案:将生成的动态库拷贝至 /lib 目录中,再次运行即可
sudo cp libmy.so /lib/

原文地址:https://www.cnblogs.com/roseAT/p/12134171.html

时间: 2024-10-22 15:15:11

gcc生成静态链接库与动态链接库步骤,并链接生成可执行文件的简单示例的相关文章

Linux-静态链接库和动态链接库

博文说明[前言]: 本文将通过个人口吻介绍Linux中静态链接库和动态链接库相关知识,在目前时间点[2017年6月14号]下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容. 本文参考文献引用链接: 1.http://developer.51cto.com/art/201107/275783.htm[动态链接库]2.http://www.jianshu.com/p/8743a0edb1ee

[C] linux静态链接库与动态链接库详解

http://blog.chinaunix.net/u2/76292/showart.php?id=1274181 一顺便说说了哦  通常情况下,对函数库的链接是放在编译时期(compile time)完成的.所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file).程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下.所以这些函数库被成为静态库(static libaray),通常文件名为"libxx

C语言之静态链接库和动态链接库

1:静态链接库 比较早出现的是静态链接库.静态库其实就是商业公司将自己的函数库源代码经过只编译不连接形成.o的目标文件,然后用ar工具将.o文件归档成.a的归档文件(.a的归档文件又叫静态链接库文件).商业公司通过发布.a库文件和.h头文件来提供静态库给客户使用:客户拿到.a和.h文件后,通过.h头文件得知库中的库函数的原型,然后在自己的.c文件中直接调用这些库文件,在连接的时候链接器会去.a文件中拿出被调用的那个函数的编译后的.o二进制代码段链接进去形成最终的可执行程序. 2:动态链接库 动态

静态链接库和动态链接库的区别及优缺点

动态链接库和静态链接库的区别 本文参考了以下博客:      1. http://blog.csdn.net/gamecreating/article/details/5504152      2. http://blog.csdn.net/left_la/article/details/12098545      3. http://blog.csdn.net/augusdi/article/details/6460415 静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序

35.静态链接库和动态链接库

35.1.函数库的前世今生 (1)函数库就是一些事先写好的函数的集合,因为函数是模块化的,因此可以被复用:我们写好了某个函数,可以被反复使用,譬如A写好了某个函数然后共享出来,当B有相同的需求时就不需自己写直接用A写好的这个函数即可. (2)最开始是没有函数库的,每个人写程序都要从零开始自己写,时间长了慢慢的早期的程序员就积累下来了一些有用的函数:早期的程序员经常参加行业聚会,在聚会上大家互相交换各自的函数库:后来程序员中的一些大神就提出把大家各自的函数库收拢在一起,然后经过校准和整理,最后形成

简单程序的编译链接三种方法(编译多个源文件,静态链接库、动态链接库)

一个程序简单的程序如下: 1 hello.h #ifndef HELLO_H#define HELLO_H void hello(const char *name); #endif 2 hello.c #include <stdio.h>#include <stdlib.h> void hello(const char *name){ printf("hello %s\n",name);} 3 main.c #include <stdio.h>#in

Linux下 静态链接库 和 动态链接库

先来说说C/C++编译过程 编译: 检查语句符号定义,将C/C++代码翻译生成中间语言. 链接: 将中间代码整合,生成可执行的二进制代码. 简单的说,库文件都是一种特殊的中间语言文件,静态库还是一种特殊格式的归档文件(打包的文件). 使用静态库: 1. 先编写库函数 1 #ifndef _PRINT_TEST_H_ 2 3 #define _PRINT_TEST_H_ 4 #ifdef __cplusplus 5 extern "C" 6 { 7 #endif 8 9 extern i

静态链接库与动态链接库

静态链接库与动态链接库都是共享代码的方式. 静态链接库(lib): 在程序执行之前完成所有的组装工作,生成一个可执行的目标文件(EXE文件). 静态库的两个特点: 链接后产生的可执行文件包含了所有需要调用的函数的代码,因此占用磁盘空间较大. 如果有多个(调用相同库函数的)进程在内存中同时运行,内存中就存有多份相同的库函数代码,因此占用内存空间较多. 动态链接库(dll&lib): 在程序装载内存的时候才真正的把库函数代码链接进行确定它们的地址,并且就算有几个程序同时运行,内存也只存在一份函数代码

介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用

首先介绍一下链接库:链接库分为动态链接库和静态链接库两种 LIB是静态链接库,在程序编译连接的时候是静态链接,其对应的文件格式是.lib.即当程序采用静态链接库的时候,.lib文件中的函数被链接到最终的可执行文件中,因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行. DLL是动态链接库,在程序运行的时候被调用,其对应的文件的格式是.dll.即当程序采用动态链接的时候,.dll文件中的函数并没有被链接到可执行文件中,可执行文件只是保存了函数的地址信息.但是