现在的位置: 首页 > 综合 > 正文

Linux C编程 1(原创)

2017年12月25日 ⁄ 综合 ⁄ 共 1316字 ⁄ 字号 评论关闭
在进行文件处理中遇到的几个问题,思考并解决

1.
犯了个错,使用 gcc -c -g  test_open1.c -o test_open1  (-c就不链接了)
 总是permission denied
-c  Compile or assemble the source files, but do not link.  The linking
           stage simply is not done.  The ultimate output is in the form of an
           object file for each source file.
                                                                                                             
           By default, the object file name for a source file is made by
           replacing the suffix .c, .i, .s, etc., with .o.

 应该gcc -g  test_open1.c -o test_open1

2
 链接后将不会产生.o目标文件, 在编译的最后阶段,链接器将搜索指定的函数库来查找用户程序使用的函数,同时将这些函数的目标模块和程序目标模块结合在一起。

 默认情况下,C编译器将搜索标准c语言库libc.so(在/lib下面),这个库包括处理输入输出的函数,以及提供了许多其他通用功能的函数。

 如果用户想让链接器搜索其他库,必须用-l参数,并在命令行中指定其他的库
例如: 数学库libm.so
       $gcc calc.c -lm
这时有没有<math.h>没有什么影响。可能它的实现放在了libm.so中

       图形库libgraphics.a
      $gcc calgrap.c -lgraphics
将这一约定用于库命名时,gcc知道在 /lib  /usr/lib 中搜索

如果
   $gcc calgrap.c -L. -L/usr/X11R6/lib -lgraphics
   gcc 将先搜索-L/usr/X11R6/lib,然后在搜索/usr/lib和/lib目录

3
像<unistd.h> (read write函数必须要的),还有<sys/type.h> <sys/stat.h>(定义了常用的变量)
<fcntl.h>(fcntl函数对已打开文件的文件描述符进行各种控制,如获取/设置文件状态标志,获取/设置记录锁,获取/设置异步I/O),
这些文件目录一般是在/usr/include,但RH9是在 /usr/include和/usr/lib/bcc/include/目录下都有,重复????

4
现代操作系统都使用共享库,也称动态库,因为在编译这些库时,并不把它们链接到程序中,只是在程序运行开始时把它们加载到程序中。装有共享库的文件名称都以.so为扩展。如libc.so
/usr/lib中有300多共享库,/usr/X11R6/lib目录下有30多共享库

ldd(动态链接关系列表)实用程序能告诉用户程序使用哪些共享库
e.g. ldd /bin/cp
 

抱歉!评论已关闭.