我们知道,Java或Android使用JNI可以实现与C或C++代码的交互,这在开发需要进行TCP或UDP通讯的java或android应用时显得尤为重要。Java或Android要调用JNI(Native)方法,需要先将封装好JNI接口的C或C++代码编译成动态函数共享库(我们通常以so作为其后缀),然后调用 System.loadLibrary方法将该so文件加载到Java或Android的运行环境去。编译该so文件很简单,Java加载的so文件直接使用gcc编译即可;Android加载的so则需要使用Android NDK内的ndk-build来编译。 阅读全文
一、Makefile的语法
一个基本的 makefile 主要由目标对象、依赖文件、变量和命令四部分组成,目标对象是 make 命令最终需要生成的文件,通常为目标文件或可执行程序;依赖文件是生成目标对象所依赖的文件,通常为目标文件或源代码文件;使用变量保存与引用一些常用值可以增强 makefile 文件的简洁性、灵活性跟可读性,一处定义,多处使用,通常还可以对其内容进行赋值或追加;目标对象通常对应着依赖文件而成为一条规则,如“hello.o:hello.c hello.h”,而对应这条规则,通常跟随着一些命令,这些命令的格式跟 Shell 终端的格式一致,如“rm -f *.o”或“$(CC) -c hello.c -o hello.o”,注意每条命令语句前面必须加上制表符 tab 键,否则 make 命令将提示错误,不论是规则语句还是命令语句,都可以引用变量,如“$(CC)”,make 命令在执行这些语句之前都会先将变量替换为它对应的值。 阅读全文
对于 Linux 跟 Unix 系统而言,make 是一个极其重要的编译命令,我们在开发项目或者安装应用软件时,经常要用到 make 或 make install,对于一个包含几十、几百甚至成千上万个源文件的项目,如果每次都要键入 gcc 或 g++ 等命令来进行编译的话,那对于程序员简直就是一场噩梦,而使用 make 和 makefile 工具便可以简洁明了地理顺各个源文件之间纷繁复杂的相互关系,将大型项目分解成多个更易于管理的模块,自动完成编译工作,并且可以只对程序员上次编译后修改过的部分进行编译。
因此,有效的利用 make 和 makefile 工具可以大大提高程序开发的效率。同时也极大地减轻了 Linux 下应用程序安装的难度。接下来,就让我们来详细了解一下 make 及其描述文件 makefile。 阅读全文
很多桌面版本的Linux系统在安装好了以后,其预置的软件已经能够满足我们的日常需求,但是我们也可能遇到一些需要自己额外安装的软件,这时候就需要用到Linux软件管理命令了。Linux系统中,软件通常以源代码或者预编译包的形式提供。由于Linux系统版本的多样性,软件安装的方式也不尽相同,常见的软件管理命令或方法分为软件源代码编译安装跟预编译安装,其中预编译安装又分为dpkg、rpm跟apt命令安装。 阅读全文
Makefile是Linux系统下的自动化编译文件,一旦写好了一个Makefile文件,以后就只需要执行make命令就能安装Makefile文件内的规则编译目标程序了。它又像一个shell脚本,其中也可以执行操作系统的指令。
Makefile的三种写法
1、复杂写法: 阅读全文