Chinaunix首页 | 论坛 | 博客
  • 博客访问: 127281
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -15
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-03 22:22
个人简介

小楼一夜听春雨

文章分类
文章存档

2017年(1)

2016年(2)

2015年(5)

2014年(21)

2013年(5)

2012年(7)

2010年(6)

2009年(2)

我的朋友

分类: C/C++

2013-02-26 01:46:27

Windows和Unix操作系统下的文件扩展名
  文件类型    Windows        Mac OS X    Unix
  目标文件    .obj           .o          .o
  静态库      .lib           .a          .a
  动态库      .dll           .dylib      .so
  可执行程序  .exe           无扩展名    无扩展名

不同工具集的命令行工具名
  工具集    编译器    链接器    归档器
  GCC       gcc       gcc       ar,lanlib

创建目标文件
  gcc -c -o 目标文件名 源文件列表

创建动态链接库
  gcc -shared --fPIC -lrt -o 库名 目标文件列表

创建静态库
  ar 库名 目标文件列表
  ranlib 库名

创建可执行文件
  gcc -o 可执行文件名 目标文件列表

参数说明
  -Ipath用于指定一个包含路径,由预处理器在处理#include宏指令时使用
  -Lpath用于指定静态库或动态库的路径

  -lname用于指定具体的静态库或动态库,原文件名为libname.a或libname.so

  --static用于指定链接时使用静态库,如果没有指定,则默认使用动态库,如果动态库不存在,则使用静态库,再如果静态库不存在,则报错


  -Ipath在创建目标文件之前的预处理过程可用到
  -Lpath和-lname在生成可执行文件时可以用到

在执行可执行文件时,哪里找相应的连接库函数
       1. 在LD_LIBRARY_PATH环境变量指定的目录下(使用命令"export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH" 导出)
  2. ld.so.cache文件该shared库对应的文件
  3. /usr/lib和/lib目录下

  在配置文件/etc/ld.so.conf中指定,可用命令ldconfig重新加载配置


编译参数的依赖库的顺序有要求吗?

 在连接时,依赖库的指定顺序必须是写在前面的依赖写后面的


同一个库如果同时存在动态库和静态库,优先链接动态库,除非使用--static强制使用静态库


关于soname
   -Wl,-soname
 
-Wl告诉编译器将后面的参数传递到连接器。而 -soname 指定了共享库的soname
   示例:$(CC) -g -shared -Wl,-soname,$@.so.1 -o $(LIB)/$@.so.1.0 $^

连接文件或目录
   ln -sf $@.so.1 $(LIB)/$@.so
   -f或--force  强行建立文件或目录的连接,不论文件或目录是否存在
   -s或--symbolic  对源文件建立符号连接,而非硬连接


常用命令行选项
  -DNAME=VALUE: macro definition
  -O: Optimize generated code
  -Wall: Enable all compiler warnings
  -g: Produce debugging symbols


阅读(2080) | 评论(0) | 转发(0) |
0

上一篇:KMP模式匹配

下一篇:SVN使用备忘

给主人留下些什么吧!~~