Linux 环境编程的一些常识
杂乱地记录一些在 linux 下编程的常识,主要来自<Beginning Linux Programming> 的第一章。
- /bin: 二进制文件目录,用于存放启动系统时用到的二进制文件。
- /usr/bin: 用户二进制文件目录,用于存放用户使用的标准程序。
- /usr/local/bin: 本地二进制文件目录,用于存放特定软件安装的程序。
- /opt: 可选的操作系统组件和第三方应用可以安装在这个目录。可以将路径添加到PATH。
- /usr/include: 系统的标准库函数。
- /usr/include/sys及 /usr/include/linux: 一般放置依赖于特定系统的头文件。
如果没有用 -o 选项告诉编译器将可执行文件放在何处,则会默认将程序放到一个名为a.out的文件里,而a.out的意思是:assembler output,即汇编输出。
库文件的类型:
- .a :archive 代表传统的静态函数库,类似于windows中的LIB文件,包含在可执行文件中。
静态库的一个缺点是:如果同时运行多个应用程序,且使用来自同一个函数库时,内存中会有多个相同的拷贝,这将浪费大量的内存和磁盘空间。 - .so :shared object 代表共享函数库,类似于windows中的dll文件,在程序运行时加载。
程序使用共享库时的链接方式是这样的:它本身不再包含函数代码,而是引用时可访问的共享代码,当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要才被加载到内存中。
可以使用ldd命令来查看程序所信赖的共享库。
在 gcc 中,参数 -lm 表示链接名为libm的库,并且,编译器会优先选择共享库。而 -L则表示添加库的搜索路径。-c 表示阻止编译器创建一个完整的程序。
$ gcc -c bill.c fred.c #生成目标文件 $ ar crv libfoo.a bill.o fred.o #生成静态库文件 $ gcc -o program program.o -L. -lfoo #指定库文件位置
info 的优点是:可以通过链接或者交叉引用来浏览文档并可直接跳转到相关的章节。
> 重定向
>> 将输出附加到一个文件中。
0:标准输入
1:标准输出
2:标准错误
