Linux系统下的扩展名并不能标识该文件是属于哪一种类型的文件。

文件是否可以执行等都跟文件的扩展名无关。

因为文件script没有执行权限,所以也就无法执行,

sh-3.2# touch ./script

sh-3.2# ls -lh ./script

-rw-r--r-- 1 root root 0 Dec 28 06:15 ./script

sh-3.2#

sh-3.2# ./script

sh: /script: Permission denied

sh-3.2#

sh-3.2# chmod 755 ./script

sh-3.2# ./script

sh-3.2# echo $?

0

sh-3.2#

在Linux系统中,虽然扩展名也和具体的程序相关联。

但文件是否可以执行却是跟扩展名无关的。

也许这种关联是为了管理上的方便吧?

Linux系统下常见的扩展名有:

.sh,通常用来表明这个文件是一个shell script文件;

.so(shared object),共享库文件,这和windows系统下的dll很像,它可以在程序运行时动态装载;

.ko(kernel object),这是从Linux内核版本2.6之后才有的,它又通常被称之为模块(module);

.o,即编译某个源文件所生成的目标文件;

.a,即静态库文件,它会在编译阶段就被打包到可执行程序中;

Linux系统支持.so和.ko,所以它使得模块化变得简单。

那要如何根据需要编译出自己的.so或.ko?

这就要看Makefile文件怎么写了,要透过Makefile向编译器(gcc)传递正确的编译参数,

这样编译器就会根据用户的需求编译出对应的文件。

比如在Makefile中向编译器指定-shared参数,那编译器就知道用户是需要编译一个

.so档案出来。

简言之:

编译器最终的输出结果是由Makefile中的配置决定的;

Makefile是由用户根据需要设定的。

gcc的命令行参数有:

链接选项、优化选项以及c语言选项等等。

软件=程序+文档,

程序=算法+数据结构

0b1331709591d260c1c78e86d0c51c18.png

Logo

更多推荐