1. 静态库一定要放在生成文件后面

gcc main.c -o main libhello.a

2. 使用静态库时一定要连接所有用到的静态库

gcc main.c -o main liba.a libb.a libc.a

a依赖于b, b依赖于c; 注意多个连接静态库的顺序 规则:越底层的库放在越后面

3. 静态库动态库相结合使用

gcc main.c –L/usr/local/lib –lworld –o main liba.a

4. 静态库链接顺序例子

1. world.c

#include<stdio.h>

void world(void)
{
printf("world!\n");
}

2. hello.c

#include<stdio.h>

void world(void);
void hello(void)
{
printf("hello.\n");
world(); }

4. main.c

void main()
{
hello();
}

5. 编译成目标文件

gcc -c hello.c world.c

6.生成静态库

ar -crv  libhw.a hello.o world.o

7. 调用静态库生成可执行文件

gcc -o main main.c libhw.a

8. 错误链接方式

生成对象和静态库顺序错误

静态类库在链接时候顺序不对,libhello.a 依赖于libworld.a

总结如下:

1. 静态库和动态库中只有你写的代码,你所调用的所有外部函数的代码都不会编译到静态库中,所有编译动态库和静态库时,不需要指定其他库的库文件路径,只需要指定其他库的头文件路径即可;

2. 链接静态库的顺序一定是从新到旧,动态库链接顺序没有要求

3. 静态库位于生成对象之后

Linux 使用静态库注意事项的更多相关文章

  1. Linux下静态库生成和使用

    Linux下静态库生成和使用 一.静态库概念 1.库是预编译的目标文件(object  files)的集合,它们可以被链接进程序.静态库以后缀为”.a”的特殊的存档(archive file)存储. ...

  2. linux上静态库链接的有关问题

    求大神,linux下静态库链接的问题有两个文件和一个库,a.c, b.c,libh.a,其中b.c里面会有调用libh.a的函数func1,现在将a.c, b.c,libh.a编译链接生成可执行文件, ...

  3. Linux上静态库和动态库的编译和使用

    linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只 ...

  4. linux下静态库的制作

     在我们编写软件的过程当中,少不了需要使用别人的库函数.因为大家知道,软件是一个协作的工程.作为个人来讲,你不可能一个人完成所有的工作.另外,网络上一些优秀的开源库已经被业内广泛接受,我们也没有必要把 ...

  5. linux连接静态库

    在项目中发现,使用 -l连接某个库时,如果存在同名的静态库(.a)和动态库(.so),默认会连接.so 那么如何指定连接静态库呢?如果有多个库,有些要连接静态库.有些要连接动态库,连接选项该如何指定呢 ...

  6. linux c: 静态库和动态库的生成和使用

    场景: main函数需要两个接口,一个求和函数,一个打印函数. int sum(int i, int j); 求两个int数字的和. void show(int i, char* name); 打印i ...

  7. [转帖]Linux 的静态库与动态库

    Linux下的静态库与动态库 2017年02月18日 09:17:13 LLZK_ 阅读数:10257 标签: linux动态库静态库区别使用 更多 个人分类: Linux学习笔记 所属专栏: Lin ...

  8. linux上静态库和动态库的编译和使用(附外部符号错误浅谈)

    主要参考博客gcc创建和使用静态库和动态库 对于熟悉windows的同学,linux上的静态库.a相当于win的.lib,动态库.so相当于win的.dll. 首先简要地解释下这两种函数库的区别,参考 ...

  9. linux 动态静态库

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种.  1  静态库和动态库的区别1.1. 静态函数库    (1)静态函数库的名字一般是lib[name].a( ...

随机推荐

  1. 09-THREE.JS 物体缩放,坐标,旋转,位移,是否可见

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  2. 一个丰富的通知工具类 --第三方开源--NotifyUtil

    把NotifyUtil Copy进自己的项目就好 实现有八种,作者在Demo里全部演示齐了,分别是 普通类型通知(单行) 普通类型通知(多行) 消息列表通知(含双图标) 含大图类型通知 自定义视图通知 ...

  3. LeetCode 315. Count of Smaller Numbers After Self

    原题链接在这里:https://leetcode.com/problems/count-of-smaller-numbers-after-self/ 题目: You are given an inte ...

  4. AngularJs1使用中出现错误 Error: [ng:areq]

    1.没有对应的控制器 2.有控制器但是路径没有配对

  5. 关于DO、VO的一些新的认识

    今天在开发前的定案以及业务介绍过程中,讲到了一些关于VO和DO的知识和理解. 听到之后就觉得很惊奇,也或许是自己以前不够深入理解开发的过程.认知的很浅薄. DO VO以前的认知里面,都是一样的,都属于 ...

  6. jQuery.extend()方法

    定义和用法 jQuery.extend()函数用于将一个或多个对象的内容合并到目标对象. 注意: 1. 如果只为$.extend()指定了一个参数,则意味着参数target被省略.此时,target就 ...

  7. Azure Blob存储更改缓存时间

    Azure的Blob存储可以作为Http的服务来使用.很多客户已经把Blob作为图片存储的服务,这样稍作代码的修改,解决了图片服务器带宽.性能等多种问题. 但同时问题也出现了:在传统Http的服务中很 ...

  8. [转载]centos下yum安装samba及配置

    centos下yum安装samba及配置 在我们使用 Windows 作为客户机的时候,通常有文件.打印共享的需求.作为Windows 网络功能之一,通常可以在 Windows 客户机之间通过Wind ...

  9. 怎么设置myeclipse的格式化键格式每行的字符长度

    MyEclipse 格式化代码调整每行长度默认每行是80~对于咱初学者,非敏捷型编码者来说~有点短以至于Ctrl+Shift+F 格式化代码后总把一行拆成两行或者更多有点不适应 所以按个人爱好 更改他 ...

  10. phonegap 解决https访问问题

    ios报错 在AppDelegate.m文件在最后加入(在@end后面加空行): @implementation NSURLRequest(DataController) + (BOOL)allows ...