总结性的一些内容,算是原创文章吧~
1、许多类UNIX的系统都是具有商业性质的,比如IBM的AIX、HP的HP-UX系统、还有Sun的Solaris系统,也有些免费的比如FreeBSD和一些Linux系统。
2、Linux是一个自由发布的类UNIX的内核实现,他是一个操作系统的底层核心。
3、Linux社区支持自由软件的概念,及软件本身不受限制,他们应遵守GNU(GNU's Not Unix)通用公共许可证(GPL)。
4、准备好的Linux发行版本(distribution Edition)叫做 flavor 。
5、Linux shell用于开发中小型程序,而且Linux并不要求可执行程序和脚本文件具有特殊的文件名或扩展名,同时搜索目录路径存储在shell变量PATH中,这一点与Windows非常的类似。
需要注意的是,linux使用冒号(:)来进行目录分割,而不是windows上的(;)分号,不要忘了点(.)代表当前目录【PHP判断系统类型的一个常量: PATH_SEPARATOR】
PATH:user/local/bin:/bin:.:/home/trojan/bin
PATH=PATH:/opt/bin
|
如果需要开机生效,需要加入到对应的 bashrc 或者 /etc/profile 中
|
6、POSIX兼容系统中,C语言编译器被称作c89,历史上,C语言的编译器叫做CC,默认编译的二进制文件名字是 a.out ,其实是 assembler output 的缩写,即汇编输出。
7、开发系统导引
①应用程序:
常用的开发工具一般在 /usr/bin 目录下面。管理员一般喜欢使用 /opt 和 /usr/local 目录,因为他们分离了厂商提供以及后续添加文件与系统本身提供的应用程序。以后重装或者升级系统只需要保留这两个目录就好了。
其中X视窗一般位于 /usr/X11或者 /usr/bin/X11目录下。
②头文件:
C语言的头文件几乎都位于 /usr/include 目录及其子目录下面,而那些依赖于特定linux版本的头文件位于 /usr/include/sys还有/usr/include/linux目录下面。
如果需要包含非标准位置的头文件,可以使用 -I 参数,比如 gcc -I /usr/openwrt/include fred.c
③库文件
库文件时一组预先编译好的函数的集合,这些函数都是按照可重用的原则编写的,标准库文件目录 /lib 和 /usr/lib 目录 中,默认编译器也只会搜索标准的C语言库。库文件的分类(.a 静态函数库 .so 共享函数库)
如果库不在标准位置,可以使用两种方法找到:
one:指出具体的文件位置 gcc -o fred fred.c /usr/lib/libm.a
two:使用-L参数指出目录, gcc -o fred fred.c -L/usr/openwrt/lib
静态库:
函数库最简单的形式是一组处于“准备好使用“状态的目标文件,当程序需要使用函数库中的某个函数的时候,包含一个声明该函数的头文件。编译器和链接器负责将程序源代码和函数库结合在一起组成一个单独的可执行文件,如果需要使用非标准C库外的库(比如数学库),就需要使用 -l 选项明确指明除了C标准库以外需要的库。
静态库也称作 归档文件(archive),惯例是 .a 作为文件的结尾,和容易创建和管理自己的静态库,只要使用 ar 命令和 gcc -c 命令对函数分别进行编译。
目录的总结:
1、系统程序所在的目录 /bin /sbin /usr/bin /usr/sbin
2、管理员使用的安装目录,推荐 /opt /usr/local
3、C程序头文件目录 /usr/include 系统相关 /usr/include/sys /usr/include/linux
4、库文件所在的位置 /lib /usr/lib
5、需要制定除了标准C库以外的参数 gcc -l libm.so 如果需要制定检索目录使用 gcc -L /usr/local/lib 这样的方式
6、使用的头文件检索目录 gcc -I /usr/openwrt/include
|
共享库:
静态库的特点,同时运行的多个程序使用同一个函数库的函数时,内存中就会有同一个函数的多个副本,而且在程序文件自身中也有多份同样的副本。使用共享库时,程序本身不再包含函数代码,而是引用运行时可访问的共享代码。当编译好的程序装载到内存时,函数引用被解析并产生对共享库的调用,如果有必要,共享库才被加载到内存中。
而且共享库之需要在硬盘上保存一份,而且共享库的更新可以独立于依赖它的应用程序,比如 /lib/libm.so是一个符号链接,连接到真正的版本的libm.so的动态库文件。
阅读(1828) | 评论(1) | 转发(0) |