1、Linux编译相关

1.1 编译

  • 编译单个源文件
    例如:main.c
    gcc main.c -o main
    ./main

  • 编译多个源文件
    例如:hello.h hello.c main.c
    gcc mian.c hello.c -o hello
    ./hello

gcc main.c -o main -v “加-v可以查看头文件以及库文件的搜索路径及具体的编译参数”

1.2 ar打包

将几个.c文件编译过后,常常可能需要用到打包指令,例如gcc -c main.c -o main.o编译后,需要将main.o打包,则需要采用ar指令,如ar -q mian.sa main.o

1.3将静态库编译成动态库

1.3.1 方法1:

ar -x xxx.a
gcc -m32 -fPic -shared *.o -o xxx.so #针对linux32位库,如果是64位库,则将-m32改成-m64

参考:http://blog.csdn.net/yuanbinquan/article/details/45536131

1.3.2 方法2:


LIBDIR = ./lib
SRCDIR = ./src
VPATH  = $(SRCDIR)PROJ  = iccp
OPT   =
DEFS  =
LIST  = >> cc.lst 2>&1CC = gccLIBRARY = $(LIBDIR)/$(PROJ).soOBJECTS = $(LIBDIR)/mem.a \$(LIBDIR)/slog.a      all: $(LIBRARY)$(LIBRARY): $(OBJECTS)rm -f $(LIBRARY)$(CC) -shared -fPIC $(OBJECTS) -Wl,-soname -Wl,$@ -o $@ -lc $(LIST)@echo "FINISHED CREATING $(LIBRARY) LIBRARY" $(LIST)@echo "-----------------------------------------------------" $(LIST)
$(LIBDIR)/mem.a: $(MAKE) $(AM_MAKEFLAGS) -f mem.mk
$(LIBDIR)/slog.a: $(MAKE) $(AM_MAKEFLAGS) -f slog.mk

注意在上面的代码中需要将
$(CC) -shared -fPIC $(OBJECTS) -Wl,-soname -Wl,$@ -o $@
改成:
$(CC) -shared -fPIC -Wl,–whole-archive $(OBJECTS) -Wl,–no-whole-archive -Wl,-soname -Wl, $@ -o $@
即可

  • 相关知识点
      
     1) 当使用–whole-archive时,其会把所有的–whole-archive之后的.sa中的所有函数全部加入到生成的文件中来,这样的情况下,如果有同名函数,则链接就不会通过;
     
     2) 当使用–no-whole-archieve时,则此后的所有文件中的所有函数都不会加到生成的文件中,但下面的第3点情况例外;
     
     3) 如果命令行中有.o文件,如test.o, 并且.o文件后面有.sa文件,则会把.o文件中用到的函数的.sa文件加入到生成的结果文件中来(即使.sa前有–no-whole-archieve);所以这和.o及.sa的顺序有关系。

     4) -Wl选项告诉编译器将后面的参数传递给链接器。
      -soname则指定了动态库的soname(简单共享名,Short for shared object name)。实际上,每一个库都有一个soname,当连接器发现它正 在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有 soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。

参考:http://blog.csdn.net/liufang200706/article/details/54410272

Linux下ar指令与静态库转动态库方法相关推荐

  1. Linux静态库和动态库的设计

    静态库和动态库的设计 宗旨:技术的学习是有限的,分享的精神是无限的. Linux应用程序设计中需要的外部函数主要由函数库和系统调用来提供 Linux应用程序使用的主要函数库均存放于/lib, /usr ...

  2. linux下生成静态库和动态库

    linux下生成静态库和动态库 一.动态库.静态库简介 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常.本质上 ...

  3. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  4. Linux下用gcc生成静态库和动态库及练习使用OpenCV

    我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为 静态库和动态库两种.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不会被连接到目标代码中,而 ...

  5. Linux下静态库与动态库的引用关系深入分析

    很久就想写一篇关于动态库和静态库互相引用的一篇文章,但是总感觉准备不充分,而一直没有勇气下笔,最近在和同事的讨论中,似乎有了一些新的认识,想把这些记录下来,和大家进行一次分享,同时也是做一次记录. 这 ...

  6. linux 中如何将文件粘贴到usr下的lib内,学会在Linux下GCC生成和使用静态库和动态库...

    一.基本概念1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同(主 ...

  7. Linux下的静态库、动态库和动态加载库

    from: http://www.techug.com/linux-static-lib-dynamic-lib 库的存在极大的提高了C/C++程序的复用性,但是库对于初学者来说有些难以驾驭,本文从L ...

  8. linux下的共享库(动态库)和静态库

    1.什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的本质不同,因此二者库的二进 ...

  9. Linux下制作和使用静态库和动态库

    写在前面: ldd + 可执行文件 可以查看可执行文件所依赖的库 概述: Linux操作系统支持的函数库分为静态库和动态库,动态库又称共享库.linux系统有几个重要的目录存放相应的函数库,如/lib ...

最新文章

  1. 网络hack工具介绍
  2. Office 2010 Multi-language Pack download
  3. 2021贵州毕节高考成绩查询,2021贵州毕节选调生考试排名查询入口-时间(已开通)...
  4. linux /proc/net/arp
  5. 理解lambda在linq中的应用
  6. 火狐浏览器表单不跳转_表单button的outline在firefox浏览器下的问题
  7. 简化java_Java泛型太复杂了?如何简化?
  8. 【原创】ObjectARX中的代理对象
  9. bigsur正式版clover引导_迟来的OC引导版本升级教程,让大家在更新mac OS Big Sur的时候变得更轻松...
  10. 在word中做复选框打对勾钩
  11. c语言中if函数应用举例,if函数(if函数的应用举例)
  12. web 基于jquery和canvas的打飞机小游戏
  13. oracle重做日志论文,Oracle重做日志文件相关概念
  14. xp进入win7计算机要密码怎么设置密码,XP系统设置直接跳过密码的多种方法
  15. 美国大选2020推特相关数据
  16. 码率控制、VBR、CBR
  17. 如何让微信小程序弹窗滚动条设置在最上面
  18. 下一代隐私基础设施的主要介绍
  19. 【2023提前批 之 面经】~ 联发科
  20. CentOS7搭建FastDFS V5.11分布式文件系统

热门文章

  1. java调用远程主机shell_Java 执行远程主机shell命令代码
  2. 服务器虚拟化的意思,服务器虚拟化存储的好处以及作用
  3. python字典功能默写_python之字典操作
  4. Rails UVA - 514(栈)
  5. 为什么要用implements Serializable
  6. 计算机二级只有前十套简单,计算机二级Access上机十套试题详细解析(经典版).
  7. Shell组件的返回码,0为成功,其他为失败.
  8. 批处理脚本手动双击可以执行,但计划任务中执行失败
  9. 2021高考成绩查询。,2021高考成绩公布时间 2021高考成绩查询方式
  10. java math mod_java8 Math新增方法介绍