一 代码

//add.h

int add(int a, int b);


int add(int a, int b)
{
    return a+b;
}



#include <stdio.h>
#include "add.h"

void main()
{
     printf("3 + 2 = %d\n",add(3+2));
}

二 多文件编译
1 生成.o文件
命令:gcc -c add.c main.c
生成:add.o,main.o

2 生成可运行文件
命令:gcc -o main add.o main.o
生成:main

3 执行
命令:./main
输出:3 + 2 = 5

二 静态库
1 生成.o文件
命令:gcc -c add.c
生成:add.o

2 生成libxxx.a
命令:ar rcs libadd.a add.o
生成:libadd.a

3 生成可运行文件
命令:gcc -o main main.c -static -L. -ladd
生成:main

4 执行
命令:./main
输出:3 + 2 = 5

三 动态库
1 生成.o文件
命令:gcc -c add.c
生成:add.o

2 生成libxxx.so
命令:gcc -shared -fPIC -o libadd.so add.o
生成:libadd.so

3 动态库路径
方法一:将文件拷贝到文件夹/usr/lib中
命令:mv libadd.so /usr/lib

方法二:设置LD_LIBRARY_PATH为当前文件夹
命令:export
LD_LIBRARY_PATH=$(pwd)

4 生成可运行文件
命令:gcc -o main main.c -L. -ladd
生成:main

#假设没有第3步。会报错:找不到libadd.so

5 执行
命令:./main
输出:3 + 2 = 5


四 Makefile文件
#mf:mult file

#liba: liaxxx.a

#libso:libxxx.so



run:main

        ./main

mfo:add.c main.c

        gcc -c add.c main.c

mfe:mfo

        gcc -o main add.o main.o

libo:add.c

        gcc -c add.c

liba:libo

        ar rcs libadd.a add.o

libae:liba

        gcc -o main main.c -static -L. -ladd

libso:libo

        gcc -shared -fPIC -o libadd.so add.o

libsoe:libso

        export LD_LIBRARY_PATH=$(pwd)

        gcc -o main main.c -L. -ladd

GCC实现多文件编译,静态库,动态库的更多相关文章

  1. C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)

    C++---初识<通过g++ / makefile  编译和调用动态库so文件>(ubuntu) ------------------------目录------------------- ...

  2. gcc编译工具生成动态库和静态库之一----介绍

     1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...

  3. C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

    目录 . 引言 . 交叉编译 . Cygwin简介 . 静态库编译及使用 . 动态库编译及使用 . MinGW简介 . CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件 ...

  4. 修改OpenSSL默认编译出的动态库文件名称

    在 Windows 平台上调用动态链接库 dll 文件时,有两种方式:a) 隐式的加载时链接:使用 *.lib (导入库)文件,在 IDE 的链接器相关设置中加入导入库 lib 文件的名称,或在程序中 ...

  5. C++开发新版本vs使用旧版本vs编译的静态库动态库

    关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成 ...

  6. 静态库动态库的编译、链接, binutils工具集, 代码段\数据段\bss段解释

    #1. 如何使用静态库 制作静态库 (1)gcc *.c -c -I../include得到o文件 (2) ar rcs libMyTest.a *.o 将所有.o文件打包为静态库,r将文件插入静态库 ...

  7. linux静态与动态库创建及使用实例

    一,gcc基础语法: 基本语法结构:(由以下四部分组成) gcc -o 可执行文件名 依赖文件集(*.c/*.o) 依赖库文件及其头文件集(由-I或-L与-l指明) gcc 依赖文件集(*.c/*.o ...

  8. Linux 静态库&动态库调用

    1.什么是库在windows平台和linux平台下都大量存在着库.本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于windows和linux的本质不同,因此二者库的二进制是不 ...

  9. Linux中创建和使用静态库&动态库

    库本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行 Linux下库的种类 linux下的库有两种:静态库和共享库(动态库). 二者的不同点在于代码被载入的时刻不同. 静态库的代码在 ...

随机推荐

  1. Hibernate(十)HQL查询二

    一.数据库的emp名和dept表 建立持久化类和配置文件,可以用MyEclipse直接生成 持久化类 package entity; import java.util.Date; public cla ...

  2. UEFI是什么?与BIOS的区别在哪里?UEFI详解!

    前几天在帮同事小何笔记本电脑安装64位 Windows 7 的时候,遇到一个从来没有碰到过的问题,使用光盘安装时,提示:Windows无法安装到这个磁盘.选中的磁盘具有MBR分区表.在EFI系统上,W ...

  3. 玩转Android Camera开发(四):预览界面四周暗中间亮,仅仅拍摄矩形区域图片(附完整源代码)

    杂家前文曾写过一篇关于仅仅拍摄特定区域图片的demo.仅仅是比較简陋.在坐标的换算上不是非常严谨,并且没有完毕预览界面四周暗中间亮的效果,深以为憾.今天把这个补齐了. 在上代码之前首先交代下,这里面存 ...

  4. Eclipse 中选中一个单词 ,其他相同的单词颜色就会变化

    "Window"-"preferences"-"Java"-"Editor"-"Mark Occurrence ...

  5. Linq to Entity调用存储过程【转】

    http://www.cnblogs.com/chenxizhang/archive/2010/01/03/1638201.html

  6. 1个比较简单的使用java反射机制获取前台数据进行数据封装的例子

    //利用反射机制 和 从request获取所有参数的形式来构建查询对象 CustomerChooseSearchParma searchObject = new CustomerChooseSearc ...

  7. CAS 5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...

  8. java IO流之文件切割两例(含Properties 用法)

    package cn.itcast.io.p1.splitfile; import java.io.File;import java.io.FileInputStream;import java.io ...

  9. 微信小程序-基于canvas画画涂鸦

    代码地址如下:http://www.demodashi.com/demo/14461.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  10. iOS-仿京东6位密码支付输入框

    概述 用于安全支付的密码支付输入框. 详细 代码下载:http://www.demodashi.com/demo/10709.html 开发需求中有时候我们需要用于安全支付的功能, 需要设置APP钱包 ...