环境:Ubuntu-13.10  32位(虚拟机)、gcc4.8.1

首先创建一个test_makefile_gcc文件夹,此test_makefile_gcc文件夹下包括:src文件夹用于存放源文件; include文件夹用于存放头文件;bin文件夹用于存放生成的动态库.so文件;lib文件夹用于存放生成的静态库.a文件;project_makefile文件夹存放此工程的makefile文件;test文件夹存放用来测试静态库和动态库的源文件;另外在test_makefile_gcc文件夹下还包含一个makefile文件。

include文件夹下包括add.h、divide.h、hybrid.h、multiply.h、subtract.h:

add.h文件内容为:

int CalAdd(int a, int b);

divide.h文件内容为:

int CalDivide(int a, int b);

hybrid.h文件内容为:

int CalHybrid(int a, int b, int c, int d);

multiply.h文件内容为:

int CalMultiply(int a, int b);

subtract.h文件内容为:

int CalSubtract(int a, int b);

src文件夹下包括add.c、divide.cpp、hybrid.cpp、multiply.cpp、subtract.c:

add.c文件内容为:

#include "add.h"int CalAdd(int a, int b)
{return a + b;
}

divide.cpp文件内容为:

#include "divide.h"int CalDivide(int a, int b)
{return a / b;
}

hybrid.cpp文件内容为:

#include "hybrid.h"extern "C" {
#include "add.h"
#include "subtract.h"
}
#include "multiply.h"
#include "divide.h"int CalHybrid(int a, int b, int c, int d)
{int tmp1=0, tmp2=0, tmp3=0, tmp4=0, result=0;tmp1 = CalDivide(a, b);tmp2 = CalMultiply(c, d);tmp3 = CalAdd(tmp1, tmp2);tmp4 = CalSubtract(tmp2, tmp1);result = CalAdd(tmp3, tmp4);return result;
}

multiply.cpp文件内容为:

#include "multiply.h"int CalMultiply(int a, int b)
{return a * b;
}

subtract.c文件内容为:

#include "subtract.h"int CalSubtract(int a, int b)
{return a - b;
}

project_makefile文件夹中makefile内容为:

add_cflags = -I../includecxxsources = \../src/divide.cpp \../src/multiply.cpp \../src/hybrid.cppcsources = \../src/add.c \../src/subtract.csources = $(cxxsources) $(csources)include ../makefile

test_makefile_gcc文件夹中的makefile文件内容为:

debug: $(sources)gcc -c -fPIC -ggdb $(add_cflags) $(sources)release: $(sources)gcc -c -Os -fPIC $(add_cflags) $(sources)

test文件夹中test_makefile_gcc.cpp文件的内容为:

#include "../include/hybrid.h"
#include <iostream>using namespace std;int main(int argc, char* argv[])
{int a=10, b=200, c=-34, d=92;int result = CalHybrid(a, b, c, d);cout<<result<<endl;return 0;
}

详细操作步骤:

1、将终端定位到project_makefile文件夹下,执行命令: make debug ;在project_makefile文件夹下生成add.o、divide.o、hybrid.o、multiply.o、subtract.o文件;

2、在lib文件夹下生成静态库libtest[linux_dbg_32].a,执行命令:ar -r ../lib/libtest[linux_dbg_32].a  *.o ;

3、将终端定位到test文件夹,执行命令:g++ -o test test_makefile_gcc.cpp  -L  ../lib  -ltest[linux_dbg_32] ,生成test执行文件;

4、执行命令:./test ,输出结果:-6256,Debug静态库的调用完成;

5、将终端重新定位到project_makefile文件夹下,执行命令:gcc  -shared  -o ../bin/libtest[linux_dbg_32].so  *.o ,在bin文件夹下生成libtest[linux_dbg_32].so ;

6、执行命令:g++  -o  ../test/test2  ../test/test_makefile_gcc.cpp -L  ../bin -ltest[linux_dbg_32] ,在test文件夹下生成test2执行文件;

7、执行命令:export  LD_LIBRARY_PATH=/home/spring/test_makefile_gcc/bin ,用于指定文件需调用的动态库的路径 (注:个人Ubuntu操作系统上实际的存放路径);

8、执行命令:./test2 ,输出结果:-6256,Debug动态库的调用完成;

9、若生成Release的动态库或静态库,执行 make release,其它步骤仅需修改生成的文件名即可。

Execute in turn:$ mkdir lib; mkdir bin$ cd project_makefile$ make debug$ ar -r ../lib/libtest[linux_dbg_32].a *.o$ cd ..; cd test$ g++ -o test test_makefile_gcc.cpp -L ../lib -ltest[linux_dbg_32]$ ./test$ cd ..; cd project_makefile$ gcc -shared -o ../bin/libtest[linux_dbg_32].so *.o$ g++ -o ../test/test2 ../test/test_makefile_gcc.cpp -L ../bin -ltest[linux_dbg_32]$ cd ..; cd test$ export LD_LIBRARY_PATH=../bin$ ./test2

GitHub:https://github.com/fengbingchun/Linux_Code_Test

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

  1. gcc生成静态库.a和动态库.a以及Ubuntu18.04下opencv3.4.11安装及示例

    目录 一.用gcc生成静态库和动态库 (一)hello示例使用库 1.准备过程 2.静态库使用 3.动态库的使用 4.静态库与动态库比较 (二)示例1使用库 二.opencv安装以及使用 (一)认识o ...

  2. Ubuntu下CodeBlocks的安装、配置及静态库动态库的简单使用举例

    1.  从Ubuntu Software Center中搜索Code::Blocks并安装: 2.  在第一次启动时选择GNU GCC Compiler作为默认的编译器: 3.  生成静态库并调用操作 ...

  3. gcc生成静态库和动态库,以及OpenCV3.4.11的安装和实例

    文章目录 一.用gcc生成静态库和动态库 (1).hello使用库实例 1.创建目录并编写hello代码 2.gcc编译得到.o文件 3.静态库的使用 4.动态库的使用 5.静态库与动态库的对比 (2 ...

  4. GCC生成静态库和动态库

    目录 1)阅读.理解和学习材料"用gcc生成静态库和动态库.pdf"和"静态库.a与.so库文件的生成与使用.pdf",请在Linux系统(Ubuntu)下如实 ...

  5. gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例

    gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例 文章目录 gcc生成静态库.a和动态库.so和OpenCV3.4.11的安装及使用示例 一.用gcc生成静态库和动态库 ( ...

  6. 用 gcc生成静态库和动态库以及静态库和动态库的使用

    文章目录 一.linux下gcc生成静态库和动态库以及库文件的使用 1.准备过程 2.静态库的创建及使用 (1)创建静态库 (2)程序中使用静态库 3.动态库的创建及使用 (1)创建动态库 (2)程序 ...

  7. 用gcc生成静态库和动态库和使用opencv库编写打开摄像头压缩视频

    文章目录 一.用gcc生成静态库和动态库 1.编辑生成程序hello.h.hello.c.main.c 2.将hello.c生成.o文件 3.使用静态库 4.动态库的使用 二.a与.so库文件的生成与 ...

  8. 成功解决Ubuntu下的make: gcc: Command not found Makefile:85: recipe for target 'obj/gemm.o' failed make: **

    成功解决Ubuntu下的make: gcc: Command not found Makefile:85: recipe for target 'obj/gemm.o' failed make: ** ...

  9. Linux-(C/C++)生成并使用静态库/动态库

    静态库/动态库概要 在Windows下静态库的后缀为:.lib.动态库后缀为:.dll:而在Linux下静态库的后缀为:.a.动态库的后缀为:.so. 那么什么是静态库呢? 首先我们来看看程序编译的大 ...

最新文章

  1. vue避免重新渲染_小白也能懂的VUE的生命周期探寻
  2. Go 语言编程 — net 库
  3. IIS7中的站点、应用程序和虚拟目录详细介绍
  4. Label中的自动换行
  5. php 多文件上传控件,php 动态多文件上传
  6. qt log4qt 输出到oracle,Log4Qt 输出地
  7. python中的enumerate函数
  8. Halcon和Visionpro的对比
  9. mysql解压版有配置文件么_3分钟安装MySQL5.7解压版
  10. 单线程实现同时监听多个端口(windows平台c++代码)
  11. 090717 T OOD时的接口
  12. 销售订单(SO)-API-给已有的销售订单增加一行
  13. solr之服务器搭建步骤
  14. 百度网盘不限速下载百度文科文档免会员下载
  15. 概率论与数理统计思维导图_“我更强调统计学的思维”——专访北京师范大学未来教育学院李勇教授...
  16. 泛微e9隐藏明细表_泛微e-cology的Ecode二次开发无侵入定制说明
  17. C语言pow函数的调用
  18. gtest学习笔记--5 死亡测试
  19. JavaScript网页特效范例宝典pdf
  20. (附源码)音乐播放小程序 毕业设计 031306

热门文章

  1. 力扣(LeetCode)刷题,简单+中等题(第32期)
  2. 有源晶振和无源晶振的区别
  3. 根据函数指针地址获取函数名
  4. 【Pandas库】(5) 索引操作--增、删
  5. 全国计算机建模三等奖,2009年全国数学建模真题(论文获国家 三等奖).doc
  6. matlab数字量转电气量,基于MATLAB的数字PID直流电机调速系统.doc
  7. 高亮提示、聚焦控件并滚动到浏览器中干好可以查看到该控件的位置
  8. Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
  9. 在Windows 8.1上使用Fiddler重定向http请求进行前端调试
  10. Ubuntu10.04安装Flash插件