linux平台开发自学笔记(三)-代码编译

linux和window编代码其实大致上是差不多的,不过在一些概念上还有差别,比如使用的库不一样,编译工具不一样,shell不一样,库的链接方式也不一样,这里做个简要的总结

1.库

window上有两种,动态库和静态库,动态库一般需要在程序编译时定义一些符号(.lib文件),然后运行时依赖.dll文件动态载入代码的

静态库则在编译时就直接把(静态库的.lib文件)编译链接进去。

当然window动态库的使用还有其他的方式,比如编译时不去导入符号,而是运行时使用dllimport等接口现场导入某个动态dll

使用动态库的好处是减少代码体积,在一个机器上同其他程序共享库的代码

在linux上分这两种库,静态库一般是.a文件,动态库是.so 文件,编译时使用gcc *.a(*.so) 就可以把库加进去,或者使用gcc -lm 意味着加入libm.a或者libm.so,默认会从默认路径寻找库,也可以通过gcc -L来制定库所在的文件夹。这里注意的是linux下面的动态库只需要一个.so就可以了,不需要windows上的符号导入。如果用了.so那么在运行程序时必须保证能找的到编译时用的那个so,要么放入默认文件夹,要么放在app同一个路径下

2.gcc,cc/gcc是linux下面常用的一个c编译器(编译c++代码时就变成了g++),gcc可以将一些c/cpp/o文件编译成 o/so/可执行文件的程序,通常的用法如下:

gcc -c .c 将源文件编译成obj文件

gcc -o app .a .so .o 将obj文件和库编成可执行文件

此外

gcc  -I 在编译时指定include文件的搜索文件夹

g  -L 在编译时指定lib文件的搜索文件夹

生成.a静态库

ar   crv .a .o .o (其实.a文件在linux上就好比很多.o文件的压缩包)

生成.so动态库

gcc -shared -fPIC -o
.so .o

可以同 ldd app来查看某个可执行文件需要依赖那些动态库,类似于window上vs带的dependency工具

3.make

make其实是linux一个具有多种处理文件过程的工具,也是编译大型工程的重要工具,在windows上,我们使用vs等ide编译一个工程很容易,但是vs为我们隐藏了一些细节,比如先生成了哪些obj文件,又是按照怎样的顺序连接?每次更改一个h文件的时候那些cpp需要重新编译?当然这是大型IDE的好处,在linux下面就需要自己去定义这些东西,这就需要make工具。

make工具需要有makefile,makefile定义了一个工程的组织形式,如make会找到当前路径下叫做Makefile的文件进行执行,如果没有,就需要通过make -f ***来指导去运行那个makefile了

makefile我认为是解决两件事:第一,尽量少的在改动代码后重新编译,所以是定义文件间的依赖;第二,定义没个文件的gcc编译规则。所以makefile基本由这两部分组成

dependency

rules(rules必须以tab开头,每行的结尾存在空格也可能导致错误)

以下是一个样本

首先这里的最上层(依赖关系的跟节点)的release clean 称为target,默认make制定会只make第一个target,可以制定make clean执行其中某个target,还可以make all 执行在all里面定义的target,#代表注释

#all:release clean

release:.o .o #这里说明最跟处的(一般是app本身啦)依赖两个.o文件

    gcc -o target .o .o #(用gcc说明怎样生成这个app)

.o: .c .h .h#说明这个.o依赖某几个代码文件

  gcc -c .c #用gcc说明这个.o文件如何生成

clean:

 -rm .o .o .o #将几个obj文件清除

当定义lib文件时,只用依赖不用rule,如

mylib.a:mylib.a(a.o) mylib.a(b.o) 说明mylib.a从a.o和b.o生成

使用某个子文件夹里的make生成的库

mylib.a:

    (cd subdir;$(MAKE)) 

宏:

MACRONAME=value #定义

 $(MACRONAME) #使用

时间: 2024-08-02 04:32:20

linux平台开发自学笔记(三)-代码编译的相关文章

linux平台开发自学笔记(二)-打造IDE

在linux上开发最大的不适应就是找不到win上的vs这种IDE了,当然可以安装一个带图形界面的系统,再装个eclipse或者kde之类的,但是这违反了进入linux平台开发的初衷,linux毕竟不是用来办公,做服务器,它的文字界面更加省能存,更加稳定,更加短小精悍,有时候还需要远程ssh到服务器上,更没有界面可言,所以还是老老实实适应vim吧. 不过vim有很多强大的插件,也可以将vim变成一个不亚于vs一些常见功能的ide,当然还是要去熟悉背一些键盘指令. 0.vim插件的安装都是一个套路,

linux平台开发自学笔记(一)-环境搭建

最近开始转战linux服务器平台开发,因此也一点点的去深入了解linux上的开发,挑自己觉得重点的记录下来 1.系统:我选择的开发环境的是centos,安装虚拟机,然后安装centos32位,centos是redhat的开源版本,有很多redhat的东西 2.安装一些开发软件,centos下面一般使用yum和rpm(redhat系列系统特有的)来安装 其中yum比较方便,直接找到最近的软件镜像一步安装到位,还支持group安装 例如 yum svn 安装svn           yum gro

分享Android开发自学笔记之AndroidStudio常用功能_Android

相关下载: Android Studio v1.3 官方最新版(apk应用开发工具) http://www.jb51.net/softs/83206.html Android Studio 官方最新版下载地址(支持国内下载)http://www.jb51.net/softjc/83204.html 一.界面区介绍 1.项目组织结构区,用于浏览项目文件,默认Project以Android组织方式展示. 2.设计区,默认在打开布局文件时为设计模式,可直接拖动控件到界面上实现所见即所得,下方的Desi

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证     要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现"高级功能"菜单.     使用"高级功能">"开发模式"之前,必须有一个已经部署在Internet

程序员最爱的Linux平台开发工具有哪些?

  Linux程序员经常抱怨,自从他们使用了免费开源的系统平台后,作为一名程序员,却并没有在代码编辑器上得到足够的重视.他们往往会认为Linux平台上的代码编辑器太少了,以至于影响他们的编程工作.但是事实并非如此,在Linux平台上有太多的代码编辑器供你使用了,下面我们分享了5个最受Linux程序员欢迎的代码编辑器,继续在编程的路上前行吧! 1.Eclipse Eclipse是一款很酷的开源代码编辑器,同时它也是最受程序员亲睐的代码编辑器之一,它拥有代码高亮和智能提示等强大的功能.在Eclips

Android开发自学笔记(六):声明权限和Activity_Android

不好意思哦,上一篇Android自学开发第六篇代码控制界面挖了个坑,如果运行不起来的同学,请注意查看本篇文章. Android Project的灵魂大师AndroidManifest.xml终于要登场了,我们可以亲切的称呼它为AM文件,认识和学会配置AM文件则是是学习Android非常重要的基础知识. AM文件定义了该Android App的需要请求的权限,需要生命的组件以及按其他App交互的一些信息,我想我需要进一步详解AM文件,期待我更新吧! 好,回到这个坑中来,我们已经使用连续的一系列文章

Android开发自学笔记(六):声明权限和Activity

不好意思哦,上一篇Android自学开发第六篇代码控制界面挖了个坑,如果运行不起来的同学,请注意查看本篇文章. Android Project的灵魂大师AndroidManifest.xml终于要登场了,我们可以亲切的称呼它为AM文件,认识和学会配置AM文件则是是学习Android非常重要的基础知识. AM文件定义了该Android App的需要请求的权限,需要生命的组件以及按其他App交互的一些信息,我想我需要进一步详解AM文件,期待我更新吧! 好,回到这个坑中来,我们已经使用连续的一系列文章

Android开发自学笔记(五):使用代码控制界面_Android

酷酷的外表已经具备了,那就开始让我们真正把它的功能给实现起来吧,外强中干,花拳绣腿可不行哦,我们需要真正的本领,需要一颗自强不息的心哦,常常想想自己的梦想什么,这样才不会迷失自己,才会在茫茫的世界中找到自己前进的方向!我不会告诉你我刚看过<voice of China session 3>哦. 从上两节教程中,我们已经会搭出如下美美的布局了,欢迎翻页查阅:) Android自学开发第四篇之布局上 Android自学开发第五篇之布局下 添加第二个layout关于layout布局我们不再赘述,这里

Android开发自学笔记(五):使用代码控制界面

酷酷的外表已经具备了,那就开始让我们真正把它的功能给实现起来吧,外强中干,花拳绣腿可不行哦,我们需要真正的本领,需要一颗自强不息的心哦,常常想想自己的梦想什么,这样才不会迷失自己,才会在茫茫的世界中找到自己前进的方向!我不会告诉你我刚看过<voice of China session 3>哦. 从上两节教程中,我们已经会搭出如下美美的布局了,欢迎翻页查阅:) Android自学开发第四篇之布局上 Android自学开发第五篇之布局下 添加第二个layout 关于layout布局我们不再赘述,这