当前位置: 首页 > 编程日记 > 正文

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

环境: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

相关文章:

Exchange Server 2013 安装完成后配置外部URL

Exchange Server 2013 安装完成后配置外部URL 比如 mail.contoso.com 1、转到 EAC → “服务器”&#xff0c;然后单击“配置外部访问域”。2、在“选择要与外部 URL 一起使用的客户端访问服务器”下面&#xff0c;单击“添加”3、选择您要配置的客户端访问服务器&#xff0c;…

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

1、 从Ubuntu Software Center中搜索Code::Blocks并安装&#xff1b; 2、 在第一次启动时选择GNU GCC Compiler作为默认的编译器&#xff1b; 3、 生成静态库并调用操作步骤&#xff0c;代码同 http://blog.csdn.net/fengbingchun/article/details/17994489 3.1、New fil…

React 打怪笔记

介绍 本文为学习react中的记录。 Tips: 当组件的props或state有变化&#xff0c;执行render函数。无论是使用函数或是类来声明一个组件&#xff0c;它决不能修改它自己的propsReact 可以将多个setState() 调用合并成一个调用来提高性能。无状态函数式组件 (stateless functiona…

新闻智能分类练习赛开始报名啦!最先达到80分就可以领GPU,技术书籍!

现代信息爆炸般地产生&#xff0c;信息如海如潮。信息分类&#xff0c;不仅有利于加快信息检索速度&#xff0c;且有利于提高查准率。Internet是信息的重要载体&#xff0c;深入地研究与探讨网上信息自动分类的方法、技术和理论&#xff0c;已成为时代的迫切需求和新的研究热点…

项目经理应该具备的技能

作为一个优秀的项目经理应该具备五个方面的技能: 项目管理知识体系 应用领域的相关知识、标准和规则项目环境知识一般管理知识软技能/人际关系技能项目管理知识体系 就是要掌握常说的9大知识领域&#xff1a;范围、时间、成本、质量、人力资源、风险、沟通、采购再加上集成…

SSE2 Intrinsics各函数介绍

SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX//#include <fvec.h>//SSE(also include ivec.h)//#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX#include <xmmintrin.h> //SSE(include mmintrin.h)#incl…

中国城市道路名图鉴

作者| AlfredWu来源 | Alfred数据室&#xff08;ID&#xff1a;Alfred_Lab&#xff09;不知道大家出差或旅游的时候有没有发现&#xff0c;有些城市特别喜欢使用其它城市或者省份的名字作为道路名&#xff0c;特别是青岛市&#xff0c;这会儿还在徐州路&#xff0c;走过一个街区…

中国电子信息产业发展研究院主办的2018中国软件大会上大快搜索“又双叒叕”获奖了...

大快搜索自荣获“2018中国大数据企业50强”殊荣&#xff0c;12月20日在由工信部指导&#xff0c;中国电子信息产业化发展研究院主办的2018中国软件大会上&#xff0c;大快搜索获评“2018中国大数据基础软件领域领军企业”称号&#xff0c;入选中国数字化转型TOP100服务商&#…

SystemCenter2012SP1实践(15)共享库服务器和ISO

用过HyperV的同学都知道&#xff0c;HyperV调用ISO作为启动光盘的时候&#xff0c;必须保存在本地才行。网络共享下的一概不认。在SCVMM下&#xff0c;我们可以通过一些设置&#xff0c;让SCVMM下创建的虚拟机&#xff0c;支持调用不在同一台主机上的ISO文件。我是分隔线首先要…

XLNet:公平PK,BERT你已经被超过!

作者 | XLNet Team译者 | 孙薇责编 | Jane出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导语】几周前&#xff0c;XLNet 团队发布了新型预训练语言模型 XLNet&#xff0c;这个新模型在各项基准测试中都优于谷歌之前发布的BERT模型&#xff0c;其中模型 XLNet-La…

C/C++中switch用法的一种替换方式

在C/C中&#xff0c;switch语句是经常被用到的&#xff0c;当switch内的case语句较多时程序有时显得比较繁乱&#xff0c;此种情况下可以用另外一种实现方式替代switch。详细用法见例子&#xff1a; #include "stdafx.h"float AddFunc(float a, float b) {return (a …

My excellent 2018

又到一年年底时&#xff0c;除了感叹一句时间过得真快之外&#xff0c;也非常庆幸自己能够渡过了这精彩的一年。 工作 首先是工作上面的变化。自16年毕业以后就在招联消费金融有限公司上班&#xff0c;一直到今年的五月份。在招联的期间&#xff0c;有幸得到老大的赏识&#xf…

POJ 2955 Brackets (区间DP)

题目链接&#xff1a;http://poj.org/problem?id2955 BracketsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 1977 Accepted: 1012Description We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a regul…

从芯片到AI智能芯片,一文了解它的前世今生

作者 | 元宵大师&#xff0c;Python高级工程师&#xff0c;致力于推动人工智能、大数据分析在金融量化交易领域中的应用。欢迎大家关注我的个人公众号《元宵大师带你用Python量化交易》。责编 | 胡巍巍来源 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;经过长期的发展…

Windows7下OpenGL简单使用举例

1、 从http://www.opengl.org/resources/libraries/glut/glut_downloads.php下载glut相关头文件和库glutdlls37beta.zip &#xff0c;(默认的windows机子上并没有glut头文件及相应的库&#xff0c;它主要用来打开窗口、开发和管理菜单&#xff0c;以及管理事件等)&#xff0c;…

Snagit9-12注册码

SnagIt 9 注册码&#xff1a; AM5SC-8LWML-MVMWU-DTLGE-ERMBE SnagIt 10 注册码&#xff1a; 5HCAK-DEGMZ-EYABA-M4LCC-ACBE2 DFKDA-JZ5FC-TGLAA-CM5DM-MFEBD CMCFH-93DCD-SFZYC-K5KCM-C7CA7 SnagIt 11 注册码&#xff1a; 7CTCC-5WQCS-98AY8-V8F2M-76258 NCTCC-5WFCK-98A28-V8…

Strut2访问

访问HelloWorld应用的路径的设置 在struts2中&#xff0c;访问struts2中action的URL路径由两部份组成&#xff1a; 包的命名空间action的名称 例如: 访问本例子HelloWorldAction的URL路径为&#xff1a; /l6n/helloWorldAction (注意&#xff1a;完整路径为&#xff1a;http:/…

单v100 GPU,4小时搜索到一个鲁棒的网络结构

作者 | Slumbers&#xff0c;毕业于中山大学&#xff0c;深度学习工程师&#xff0c;主要方向是目标检测&#xff0c;语义分割&#xff0c;GAN责编 | JaneNAS最近也很火&#xff0c;正好看到了这篇论文&#xff0c;解读一下&#xff0c;这篇论文是基于DAG&#xff08;directed …

关于pyecharts 地图显示添加数据的问题

echarts &#xff1a; 香港地区显示&#xff08;人口密集的人口数目&#xff09; http://echarts.baidu.com/examples/editor.html?cmap-HK series: [ { name: 香港18区人口密度, type: map, mapType: HK …

MMX Intrinsics各函数介绍

SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #…

大数据中台向AI中台演进是大势所趋?

来源 | 宜信技术学院&#xff08;ID:CE_TECH&#xff09;导读&#xff1a;自从阿里巴巴提出“中台”的概念之后&#xff0c;这个词汇就成为各领域企业关注的焦点&#xff0c;很多人在考虑建设自己的中台。然而&#xff0c;构建中台是否真有必要&#xff1f;是否所有的企业都要建…

WordPress标签

1、分类目录调用函数&#xff1a; <?php wp_list_cats();?> 2、调用页面函数&#xff1a; <?php wp_nav_menu( array( theme_location > ast-menu-primary, container > false ) ); ?> 3、转载于:https://blog.51cto.com/okowo/…

SSE3和SSSE3 Intrinsics各函数介绍

SIMD相关头文件包括&#xff1a; //#include <ivec.h>//MMX //#include <fvec.h>//SSE(also include ivec.h) //#include <dvec.h>//SSE2(also include fvec.h)#include <mmintrin.h> //MMX #include <xmmintrin.h> //SSE(include mmintrin.h) #…

kubernetes学习笔记之十三:基于calico的网络策略入门

一、.安装calico [rootk8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml clusterrole.rbac.authorization.k8s.io "calico" created clusterrole.rbac.authorization.k8s.i…

设计模式之抽象工厂模式(Abstract Factory)摘录

面向对象系统的分析和设计实际上追求的就是两点&#xff1a;高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类&#xff1a;创建型模式、结构型模式、行为模式。 创建型模式包括&#xff1a;1、FactoryMethod(工厂方法模式)&#xff1b;2、Abstract Factor…

grub设置密码的方法

grub设置密码的方法&#xff1a;一、grub设置明文口令的方法&#xff1a;修改/etc/grub.conf配置文件就可以了.[root RedHat ~] # vi /etc/grub.conf #注&#xff1a;此为链接文件&#xff0c;指向 /boot/grub/grub.conf#boot/dev/hdbdefault0timeout5splashimage(hd0,0)/gr…

web服务器(IIS)的操作步骤

转载于:https://blog.51cto.com/14118520/2335646

微软全球AI总监:Azure AI是OpenAI技术商业化变现唯一、排他性合作方

作者 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;7 月 24 日下午&#xff0c;微软在北京举行了媒体交流会。会上&#xff0c;微软全球副总裁&#xff0c;人工智能平台负责人 Eric Boyd 介绍了 Azure AI 近期的最新进展情况&#xff0c;并带…

NYOJ_16_矩形嵌套

有点小坑的严格单调递增序列&#xff0c;主要是排序那里坑了一下。 思路&#xff1a;矩形的嵌套&#xff1f; (a<c&&b<d)||(a<d&&b<c)? 不&#xff0c;只要在建点时保证a<b&#xff0c;条件就会少一个&#xff0c;直接a<c&&b<…

抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

作者 | James Vincent等编译 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;在过去的一年中&#xff0c;AI 生成书面文字的能力大大提高。通过扫描庞大的文本数据集&#xff0c;机器学习软件可以生成从短篇小说到歌词的各种令人信服的样本。…