精华内容
下载资源
问答
  • .a文件:是.o文件的集合(.a 是有一系列 .o 文件通过 ar 程序打包在一起的静态库,要把它转成动态库只需先解开,生成一堆 .o 文件。) .so文件:是表示的动态库 首先 1. g++ -c -fPIC test.cpp #将cpp源文件...

    必备知识:

    .o文件:是表示的静态库

    .a文件:是.o文件的集合(.a 是有一系列 .o 文件通过 ar 程序打包在一起的静态库,要把它转成动态库只需先解开,生成一堆 .o 文件。)

    .so文件:是表示的动态库

    首先

    1.

    g++ -c -fPIC test.cpp          #将cpp源文件编译为.o文件
    ar x libGuideUSBCamera.a       #将.a库解包,将里面的.o文件全部解出来
    ar crU libGuideUSBCamera.a *.o #将页面内全部的.o文件重新导入到.a库里边
    ranlib libGuideUSBCamera.a     #ranlib的作用:ranlib 命令用于 更新库的符号索引表。 当只执行了ar命令(用于更新)时, ld连接时会仍然报错,查找不到更                                  新的变量或函数,此时需要用ranlib来更新库的符号索引表才行。

    2.

    ar x libGuideUSBCamera.a         #将静态库.a文件解包
    gcc -shared *.o -o xxx.so     #将所有.o文件‘转化为’动态库xxx.so文件
    #gcc -shared -o xxx.so *.o

    交叉编译的操作:

    编译文件

    g++ -o xxx.o -shared -fPIC -c test.cpp                                       #将cpp文件编译为.o静态库
    g++ -o libxxx.so xxx.o -shared -fPIC -L. -lGuideUSBCamera -lpthread -lm      #将动态库连接到全部的静态库(lGuideUSBCamera.a和xxx.o)

    reference:

    (1条消息) 静态库 .a 转成共享库 .so_小小的生活,大大的世界-CSDN博客

    (1条消息) Linux下c/c++的动态库、静态库制作和使用,并供python调用_Snow_cat123456的博客-CSDN博客

    (1条消息) 动态库(.so)链接静态库(.a)的总结 - 很实用讲解很清楚_zxh2075的专栏-CSDN博客

    认识下对操作库的基本操作:

    展开全文
  • 单片机中代码生成.a文件

    千次阅读 2020-07-16 08:57:03
    单片机中代码生成.a文件 1、首先要把.c文件生成.o文件 2、然后再把.o文件生成.a文件。 具体操作步骤如下: (1)编译生成.o目标文件,如:gcc -c test.c 注:-c选项表示只编译生成.o目标文件. (2)使用ar命令...

    概述

        单片机开发中有时会遇到把项目中一部分功能外包或者模块外包出去,此时公司核心代码,又不想提供。那么就要提供.a文件给外包人员了,有些废话,本篇只要是讲解 .c文件怎么生成 .a文件步骤。

    1、环境:window10。

    2、安装gcc工具,在这,我安装了mingw这个工具。
    单片机中代码生成.a文件
    1、首先要把.c文件生成.o文件

    2、然后再把.o文件生成.a文件。

    具体操作步骤如下:

    (1)编译生成.o目标文件,如:gcc -c test.c     

      注:-c选项表示只编译生成.o目标文件.

    (2)使用ar命令生成.a库文件,如ar -rv test.a test.o  

     注:ar命令可以用来创建、修改库,也可以从库中提出单个模块。

    r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。
    如果若干 模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。
    默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。

    v: 该选项用来显示执行操作选项的附加信息。

    注:我们可以跳过第一步,直接使用VSGDB生成的.o文件执行第二步。
        需要使用到的Dos命令:cd 跳转 dir查看(相当于linux下的ls) cls清屏(相当于linux下的clear)

    展开全文
  • .o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件. .a 就是archive, 也就相当于windows的VC下编译的lib文件, 俗称静态库文件. .o文件是链接文件,.a是静态库文件...生成.a文件: ar cqs test.a test...

    .o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件. 
    .a 就是archive, 也就相当于windows的VC下编译的lib文件, 俗称静态库文件.

    .o文件是链接文件,.a是静态库文件,靠.o文件生成,作为一个库为外部程序提供函数,接口。 
    生成.o文件: 
    gcc -c test.o test.c 
    生成.a文件: 
    ar cqs test.a test.o

    .o 就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件 
    .a 是好多个.o合在一起,用于静态连接 ,即STATIC mode,多个.a可以链接生成一个exe的可执行文件 
    .so 是shared object,用于动态连接的,和windows的dll差不多,使用时才载入。

    原文链接:http://blog.sina.com.cn/s/blog_935ccd710101iu3s.html

    展开全文
  • 关于linux下的.a文件与 .so 文件

    万次阅读 2017-10-13 15:44:04
    连续几天终于将一个又一个问题解决了,这里说其中一个问题  描述问题:使用多线程pthread的时候,(我用的IDE,... 发现:pthread要用到动态链接库(libpthread.a)才能使用。  解决办法:后来在setting->compl

    链接:http://www.cnblogs.com/luntai/p/5291354.html

    描述问题:使用多线程pthread的时候,(我用的IDE,CODEBOLCKS)编译后发现直接弹出窗口,程序还没有被Build。。巴拉巴拉,然后陷入了这个循环。提示有一句pthead_create未定义。

      发现:pthread要用到动态链接库(libpthread.a)才能使用。

      解决办法:后来在setting->complies and link->link setting里面加入了系统中这个文件的地址。

      详细查了一下,.a与.so的区别,其实就是静态链接库与动态链接库。有一篇博文,很详细,附上链接:http://blog.csdn.net/nieyinyin/article/details/6890557

    Linux下的.so是基于Linux下的动态链接,其功能和作用类似与windows下.dll文件。

      下面是关于.so的介绍:

    一、引言

      通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.a”的形式。


      其实,我们也可以把对一些库函数的链接载入推迟到程序运行的时期(runtime)。这就是如雷贯耳的动态链接库(dynamic link library)技术。

    二、动态链接库的特点与优势

      首先让我们来看一下,把库函数推迟到程序运行时期载入的好处:

    1. 可以实现进程之间的资源共享。

      什么概念呢?就是说,某个程序的在运行中要调用某个动态链接库函数的时候,操作系统首先会查看所有正在运行的程序,看在内存里是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。这样的模式虽然会带来一些“动态链接”额外的开销,却大大的节省了系统的内存资源。C的标准库 就是动态链接库,也就是说系统中所有运行的程序共享着同一个C标准库的代码段。

    2. 将一些程序升级变得简单。用户只需要升级动态链接库,而无需重新编译链接其他原有的代码就可以完成整个程序的升级。Windows 就是一个很好的例子。

    3. 甚至可以真正坐到链接载入完全由程序员在程序代码中控制。

      程序员在编写程序的时候,可以明确的指明什么时候或者什么情况下,链接载入哪个动态链接库函数。你可以有一个相当大的软件,但每次运行的时候,由于不同的操作需求,只有一小部分程序被载入内存。所有的函数本着“有需求才调入”的原则,于是大大节省了系统资源。比如现在的软件通常都能打开若干种不同类 型的文件,这些读写操作通常都用动态链接库来实现。在一次运行当中,一般只有一种类型的文件将会被打开。所以直到程序知道文件的类型以后再载入相应的读写 函数,而不是一开始就将所有的读写函数都载入,然后才发觉在整个程序中根本没有用到它们。

    三、动态链接库的创建

      由于动态链接库函数的共享特性,它们不会被拷贝到可执行文件中。在编译的时候,编译器只会做一些函数名之类的检查。在程序运行的时候,被调用的动态链接库函数被安置在内存的某个地方,所有调用它的程序将指向这个代码段。因此,这些代码必须实用相对地址,而不是绝对地址。在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址不无关代码(Position Independent Code (PIC))。

      对gcc编译器,只需添加上 -fPIC 标签,如:

    gcc -fPIC -c file1.c
    gcc -fPIC -c file2.c
    gcc -shared libxxx.so file1.o file2.o

      注意到最后一行,-shared 标签告诉编译器这是要建立动态链接库。这与静态链接库的建立很不一样,后者用的是 ar 命令。也注意到,动态链接库的名字形式为 “libxxx.so” 后缀名为 “.so”

    四、动态链接库的使用

    a.隐式调用 (静态库与此相同的方式)

      使用动态链接库,首先需要在编译期间让编译器检查一些语法与定义。

      这与静态库的实用基本一样,用的是 -Lpath 和 -lxxx 标签。如:

    gcc file1.o file2.o -Lpath -lxxx -o program.exe

      编译器会先在path文件夹下搜索libxxx.so文件,如果没有找到,继续搜索libxxx.a(静态库)。

      在程序运行期间,也需要告诉系统去哪里找你的动态链接库文件。在UNIX下是通过定义名为 LD_LIBRARY_PATH 的环境变量来实现的。只需将path赋值给此变量即可。csh 命令为:

    setenv LD_LIBRARY_PATH   your/full/path/to/dll

      一切安排妥当后,你可以用 ldd 命令检查是否连接正常。

    ldd program.exe

    动态链接库*.so的编译与使用

    b.显示调用:

      这种方式更加灵活。在代码中需要调用的地方使用 #include <dlfcn.h>这个头文件中的以下函数来调用:

     

    void  *dlopen(const char *,int);

    void  *dlsym(void *,const char *);

    int    dlclose(void *);char  *dlerror(void);

     

    展开全文
  • 按照自己的理解画的动态链接和静态链接的关系。...应该是这样的,个人理解在Vxworks平台上是没有动态链接的,但是.o或者.out文件可以使用vxWorks的loader(loadLib)动态加载到vxworks的镜像中。 谢谢拍砖 ...
  • .a文件和.lib文件的区别

    万次阅读 2017-07-06 10:50:42
    .a文件和.lib文件的区别  2013-08-01 10:42:37| 分类: 编程知识|举报|字号 订阅    下载LOFTER我的照片书 | (转载) 最近开始...
  • linux下生成.so文件和.a文件

    千次阅读 2019-01-23 10:48:37
    原文链接:...   linux下生成.so文件和.a文件 test.h 1 #ifndef _TEST_H_ 2 #define _TEST_H_ 3 4 void TestA(); 5 void TestB(); 6 7 #endif   t...
  • 就相当于windows里的obj文件 ,一个.c或.cpp文件对应一个.o文件.a文件::: 是好多个.o合在一起的静态库文件,相当于windows下的.lib文件。给外部程序提供接口,用于静态连接 ,即STATIC mode。多个.a可以链接生成...
  • .a文件.o文件和.so文件的区别

    千次阅读 2016-09-06 00:21:06
    o 就相当于windows里的obj文件 .a 是好多个.o合在一起,用于静态连接 .so 是shared object,用于动态连接的,和dll差不多
  • linux下将.a文件链接到.so文件的问题

    千次阅读 2017-06-05 19:34:41
    linux下将.a文件链接到.so文件的问题 时间 2014-11-25 15:30:01 姜糖水 原文 http://www.cnphp6.com/archives/63743 主题 Linux 比如在链接lib123.a库生成libabc.so库时经常会遇到这个问题,当...
  • iOS两个.a文件合并成一个.a文件

    千次阅读 2016-04-18 16:34:06
    网上流传了太多关于合并lib库的方法,自己也尝试过,但大多失败。有感于这种急于解决问题,经过百般尝试后依旧无果的无奈心情,小翁在这里用一个实例来完整...本文的目标:合并libDomobOfferWallSDK.a、libDomobAdWa
  • 从Ubuntu系统中获取.so文件与.a文件 1.在"usr/lib/x86_64-linux-gnu"目录找到.so与.a文件 2.libxx.so文件与libxx.so.x.x.x文件的区别与联系  3.对于2中第四点的示例(链接库时,只能选择.so文件或者.a...
  • 在linux中cmake 使用.so .a文件

    千次阅读 2017-09-15 15:57:11
    是不是拿到.so .a 文件直接在cmakelist.txt中添加下面两句就...答案当然不是,你还需要拿到头文件,如果没有头文件依旧无法使用,回忆下.so.a文件的生成过程,好像在生成的时候就没有用到头文件,因此我猜测.so.a文件
  • ubuntu下gcc链接静态库.a文件

    万次阅读 2017-05-24 13:42:24
    ubuntu下gcc链接静态库.a文件
  • 解压静态库.a文件

    万次阅读 2015-11-16 20:34:31
    首先先准备一个静态库.a文件,比如叫staticLibrary.a,放在桌面的test目录里。分离arch首先先file一下staticLibrary.a,看一下该文件包含几种arch。~ cd Desktop/test test ls staticLibrary.a test file static...
  • Linux环境下静态库的生成和使用 (.a文件)

    万次阅读 多人点赞 2016-07-18 14:56:24
    2.静态库的后缀名是.a,对应于windows操作系统的后缀名为.lib的静态库。 3.可以使用ar命令来创建一个静态库文件。 来看一个实例,根据书中的代码简化的,先看一看可以编译成库文件的源文件中的代码: [cpp]...
  • 很多人都知道,gcc在链接静态库时是从前往后找符号。...如果我们在链接命令中,直接用.o文件替换.a文件,那也需要遵循gcc的这种链接顺序吗?可以用gcc .. bar.o ... foo这样的链接命令吗?可以做个简单的试验。
  • SVN不能提交.a文件的解决办法

    千次阅读 2015-05-13 09:31:50
    在提交项目修改的时候,发现SVN并没有为我们自动将.a文件归到要添加的文件中,解决办法有:首先通过终端打开配置文件: open ~/.subversion/config把下面两行(也可能是一行)中的注释和*.a去掉,然后保存.#global-ignores ...
  • xcode 制作静态库.a文件 详解

    万次阅读 2014-03-19 10:39:06
    其实这个错误原因很简单,就是因为,我们用错了编译出来的libUITab.a lib,在模拟器里面,我们需要的是基于i386构架编译的static lib,但是这个a文件,大家还记得前面说的arm6 arm7构架的么。这个a其实是在iphone这...
  • 1、用gcc的-c选项生成.o文件,如 ...2、然后用ar命令生成.a文件,如 ar crv test.a test1.o test2.o test3.o 我们知道静态库也称档案库,在此档案文件中实际上是收集了一系列的目标文件。这
  • CornerStone上传静态库(.a文件

    千次阅读 2014-08-07 14:38:39
    关于 CornerStone怎么配置及简单使用问题网上有很多博客可以参考 这里提供一个地址...今天要来说的是怎么上传静态库,也就是.a文件 go 首先打开软件左上角 CornerStone-Preferences-SubVersion file:///U
  • Ios Xcode工程添加.a文件引起错误的几种修改方法(一般是微信的.a静态库出错) 一、 TARGETS -> Build Settings-> Search Paths下 1. Library Search Paths 删除不存在的路径,保留.a文件的路径(此处显示的为...
  • linux 下 .o 文件, .a文件,.so文件的区别

    万次阅读 多人点赞 2012-03-02 14:32:10
    最近在unbuntu环境下开发代码,由于很少使用linux开发环境,所以对linux编译方面了解更少,关于.o, .a, .so文件和可执行文件一直很困惑 今天特意查了一下关于它们的区分: .o 就相当于windows里的obj文件 ,一个...
  • 文件列表: 代码文件/* 下列代码保存到 plus.cpp */int my_plus(int x,int y) { return x + y; } /* 下列代码保存到 minus.cpp */ int my_minus(int x,int y) { return x - y; } /* 下列代码保存到 my_...
  • 最近公司在进行组件化开发,用pod进行集成,碰到不少问题,在这把遇到坑分享给大家如果在制作pod时导入了.a文件,如果下图得在podspec文件里包含这句话s.vendored_libraries = 'WoqiSDK/Classes/*.a'路径记得要换...
  • 首先创建一个工作目录,将需要用到的.a文件、.o文件拷贝进去, 使用ar -x命令解压.a静态库: ar -x libhiredis.a ar -x libpcap.a 可以看到当前目录下,被解压出许多.o文件, 之后,使用ar -r ...
  • svn 无法上传.a 文件的解决办法

    万次阅读 2014-06-16 11:12:53
    svn 无法上传.a 文件的解决办法
  • 一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) ALLLIB=*.a FILE=`ls *.a` #原来的库解压重命名 for F in $FILE do  ar x $F  OBJ=`ar t $F`  for O in $OBJ  do

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,821,752
精华内容 2,328,700
关键字:

.a文件

友情链接: hello_.rar