linux 如何优先链接静态库 [问题点数:40分,结帖人zhenwo123]

Bbs1
本版专家分:69
结帖率 89.8%
Bbs5
本版专家分:4329
Bbs3
本版专家分:881
Bbs1
本版专家分:69
Bbs3
本版专家分:881
Bbs7
本版专家分:20132
Blank
红花 2013年4月 Linux/Unix社区大版内专家分月排行榜第一
2012年8月 Linux/Unix社区大版内专家分月排行榜第一
2011年10月 Linux/Unix社区大版内专家分月排行榜第一
Blank
蓝花 2013年5月 Linux/Unix社区大版内专家分月排行榜第三
2012年10月 Linux/Unix社区大版内专家分月排行榜第三
2012年7月 Linux/Unix社区大版内专家分月排行榜第三
2011年12月 Linux/Unix社区大版内专家分月排行榜第三
如何将依赖的静态编译到自己的动态/静态中?
创建了一个工程 backServer, 依赖于<em>静态</em><em>库</em> a.lib,b.lib,c.lib。在VS工程中设置附加依赖<em>库</em>添加a.lib,b.lib,c.lib。 编译生成动态<em>库</em>backServer.dll
如何将第三方静态加入Makefile.am中??
在利用autoconf/libtool生成Makefile过程中,需要调用第三方的一个<em>静态</em><em>库</em>,比如xxxxx.a. 那么应该把这个<em>静态</em><em>库</em>写在Makefile.am的什么地方,怎么写?谢谢!!! 比如,
浅谈GCC/Clang生成和链接静态/动态
为了方便下面的讲解,先写两个C++源文件,代码如下: 1 2 3 4 5 //add.cpp int add(int a, int b) {     return a + b; } 1 2 3 4 5 6 7 8 9 10 11 //main.cpp #include in
gcc中动态静态链接顺序
so文件:动态<em>库</em>a文件: <em>静态</em><em>库</em>exe文件:可执行程序(<em>linux</em>下以文件属性来标示是否是可执行文件,与后缀名无关)gcc中<em>链接</em>顺序问题,总结出以下几点:1,动态<em>库</em>中可以包含另一个<em>静态</em><em>库</em>,通过参数 -lxxx 把<em>静态</em><em>库</em>libxxx.a加入so文件中,这样so文件中   就包含了libxxx.a的所有实现。当然,如果不包含libxxx.a也没有问题,这样生成的so会小一点。   如果不包含libxx...
linux下的静态和动态以及gcc常见编译选项
一、<em>linux</em>下的<em>静态</em><em>库</em>和动态<em>库</em> <em>linux</em>和windows下都有大量的<em>库</em>,<em>库</em>在本质上就是可执行的二进制代码,可以被操作系统载入内存执行。我们通常将一些通用函数写成函数<em>库</em>,所以<em>库</em>是别人写好的,现有的,成熟的,可以复用的代码,你可以使用但要必须得遵守许可协议。 1.<em>静态</em><em>库</em> <em>静态</em><em>库</em>的文件命名方式是“libxxx.a",<em>库</em>名前加"lib",windows和<em>linux</em>下都是用后缀”.a",“xxx"为<em>静态</em>...
GCC链接静态链接顺序浅析
1. 编译<em>链接</em>介绍 一份C代码要编译成为可执行文件,需要经历以下步骤:预编译,编译,汇编,<em>链接</em>[1],如图1。 图1 编译和<em>链接</em>过程 首先,在预编译阶段,源代码文件被预编译器cpp预编译成一个.i文件。预编译主要处理源代码文件中的以”#”开始的预编译指令。比如:”#include”、”#define”等。经过预编译后的.i文件不包含任何宏定义。 编译阶段就是把预处理完的文件...
Linux运行时动态搜索路径优先
转自https://blog.csdn.net/astrotycoon/article/details/9882227 LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和作用分别如下: LIBRARY_PATH环境变量用于在程序编译期间查找动态<em>链接</em><em>库</em>时指定查找共享<em>库</em>的路径,例如,指定gcc编译需要用到的动态<em>链接</em><em>库</em>的目录。 LD_LIBRARY_...
static link:关于gcc连接静态的几种方式
开发一个应用程序不可避免要使用多个第三方<em>库</em>(library). 默认情况下,gcc采用动态连接的方式连接第三方<em>库</em>,比如指定`-lpng`,连接程序就会去找`libpng.so`。 gcc提供了一个`-static`参数,可以改变gcc默认的连接方式,GNU官网上关于gcc连接选项的手册[《3.14 Options for Linking》][1]中有说明:如下
linux静态的几种链接方式
在项目中遇到隐蔽一个问题,如下: 按上面的方式进行<em>链接</em>,提示一直找不到-lipc_server,后面发现是由于生成的<em>库</em>没有加lib前缀导致的,应该要这种格式libipc_server.a,但是另一种方式可以<em>链接</em>ipc_server.a这种形式的<em>库</em>,如下: 这种方式直接指定对应的<em>库</em>就行了。 总结一下: 1、以-L,-l指定<em>库</em>时,gcc会在对应的路径搜索有lib前缀的<em>库</em>,所以生成的
静态链接动态时,如何使用该静态
假设libXXX.a用了libpthread.so的函数“pthread_create”,那libXXX.a在<em>链接</em>时,有没有把“pthread_create”函数copy到自己身上,使其完全独立?main.c在<em>链接</em>时,只需要<em>链接</em>libXXX.a,还是连libpthread.so也要<em>链接</em>?!这就是我要讨论的内容!
链接一个静态到另一个静态
问题:有两个<em>静态</em><em>库</em>a.lib和b.lib,<em>静态</em><em>库</em>x.lib使用a.lib和b.lib,x.lib相当于提供了一个输出<em>库</em>,应用程序app.exe使用x.lib。那么,应用程序app当然需要连接到<em>静态</em><em>库</em>x.lib,但它是否还需要连接到a.lib和b.lib? 解答:根据实验,app必须同时连接a.lib和b.lib,否则会产生连接错误。 13 down vote acc
动态(.so)链接静态(.a)的情况总结
动态<em>库</em>(.so)<em>链接</em><em>静态</em><em>库</em>(.a)的情况总结一般来说在<em>链接</em>时想要使用<em>静态</em><em>库</em>有三种方法:1、link时加上 -static 选项;当加上 -static选项后,gcc会把所有用到的<em>库</em>都做<em>静态</em>连接。2、link时直接指定想要<em>静态</em>连接的.a文件的绝对路径。优点是除非.a文件不存在,否则肯定有效;缺点也是很明显,拿到其他机器上编译时,.a文件也必须在相同的路径下存放。3、在要<em>静态</em>连接的<em>库</em>前指定-Bsta...
GCC同时使用静态和动态链接
一 在应用程序需要连接外部<em>库</em>的情况下,<em>linux</em>默认对<em>库</em>的连接是使用动态<em>库</em>,在找不到动态<em>库</em>的情况下再选择<em>静态</em><em>库</em>。使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个<em>库</em>libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接<em>静态</em><em>库</em>则使用: gcc test.cpp -L. -static
静态链接顺序
今天工作中遇到了一个很诡异的问题: 项目中, a.c和b.c编译出的obj先打包成<em>静态</em><em>库</em>c.a, 再和另外一个d.a以及main.c编译出的obj<em>链接</em>成最后的bin文件. a.c中有private_init()和private_read()两个函数, 其中private_init()是个空函数, private_read()则在d.a中被调用. 出现的现象是这样: 如果我main.c中
Makefile 编译与链接选项及CFLAGS与LDFLAGS示例说明
最近看了makefile的手册之后,发现还是不知道怎么写makefile,而且就连看也看的是云里雾里,就我现在工作当中看到的一些makefile文件,只能看个大概的意思,一旦涉及到文件添加、<em>静态</em><em>库</em>、动态<em>库</em>等增加、删除;文件搜索路径等的修改就没法下手了,因此必须对我比较关注的地方进行深度学习,知其然还要知其所以然,知道怎么从无到有写出来,而且别人的makefile还要知道怎么根据需求的变化进行修改。...
【Linux】实现简单的静态链接和动态链接,二者区 别
练习<em>静态</em><em>库</em>/动态<em>库</em>之前,先创建三个文件。 test.c文件:定义函数 test.h文件:声明函数 main.c:测试 <em>静态</em><em>库</em> 生成一个<em>库</em>其实就是将所有的代码都打包起来–最终得到一个<em>库</em>文件。 <em>静态</em><em>库</em>需要创建.o文件打包起来才能<em>链接</em>。 1.先创建test.o文件 2.将所有test.o文件(这里只有一个)打包成一个libtest.a文件。 3.在当前文件下找test名字的.a文件,用生成可...
Linux环境下,Makefile中如何链接静态
我新写一个test.c,test.c中调用到一个第三方<em>静态</em><em>库</em>(libcrexr64.a)中的函数,test.c和libcrexr64.a都位于当前目录下,我在Makefile中应该如何写? 对于Mak
undefined reference问题总结--转载
摘自:http://ticktick.blog.51cto.com/823160/431329 注意下面提到的:“4 多个<em>库</em>文件<em>链接</em>顺序问题”   最近在Linux下编程发现一个诡异的现象,就是在<em>链接</em>一个<em>静态</em><em>库</em>的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func'      关于undefined refer
linux下程序链接多个静态,提示找不到函数链接的问题。
有时候你会发现函数所在的<em>静态</em><em>库</em>,明明在Makefile里指定了,但是还是会报错,提示找不到。 原因就在于<em>静态</em><em>库</em>之间有依赖关系以及<em>链接</em>顺序问题。书写在右边的<em>库</em>最先被<em>链接</em>。 解决办法: 一般来说有两种办法,一种是仔细分析依赖关系,并按照正确的顺序书写<em>库</em>文件的引用。原则是被依赖的尽量写在右边。但是在有些大型项目中,依赖关系可能并不容易梳理清楚。此时可以在命令行参数中重复对<em>库</em>文件的引用。...
linux链接非标准命名的静态
本文转自:https://blog.csdn.net/aguei868/article/details/52624065 在项目中遇到隐蔽一个问题,如下: 按上面的方式进行<em>链接</em>,提示一直找不到-lipc_server,后面发现是由于生成的<em>库</em>没有加lib前缀导致的,应该要这种格式libipc_server.a,但是另一种方式可以<em>链接</em>ipc_server.a这种形式的<em>库</em>,如下: 这种方式直接指定对...
linux下封装函数——动态.so和静态.a(代码实现及链接方式)
在<em>linux</em>环境下的<em>链接</em><em>库</em>分为<em>静态</em><em>链接</em><em>库</em>(.a<em>库</em>)和动态<em>链接</em><em>库</em>(.so<em>库</em>),其作用是把C程序编译好做成一种可执行<em>链接</em>文件,主程序文件调用这些程序的函数接口是可以使用a<em>库</em>或so<em>库</em>,在主程序中只需要include含有<em>库</em>中提供的函数接口声明的头文件即可。所以学会如何将自己的源代码封装成<em>库</em>进行使用很重要,接下来就来介绍一下然后进行<em>库</em>的封装: 1、动态<em>链接</em><em>库</em>的制作: 首先,生成一个简单的函数实现myma...
linux下动态/静态 链接路径设置问题
g++/gcc 连接 so动态<em>库</em>或者 .a<em>静态</em><em>库</em>时,需要设置这些动态<em>库</em>的路径, 例如: g++ -o main main.cpp -L./lib -ldymamic -lpthread -lrt  这些是设置到哪个目录下去查找关联的动态<em>库</em>。 如果在-L目录下面找不到相应的动态<em>库</em>,就会到 LD_LIBRARY_PATH 的目录下去找,如果还找不到,就会到/usr/lib 目录下去找。
undefined reference问题总结
声明:本文为转载过来的,来自于 :http://ticktick.blog.51cto.com/823160/431329 最近在Linux下编程发现一个诡异的现象,就是在<em>链接</em>一个<em>静态</em><em>库</em>的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func'      关于undefined reference这样的问题,大家其实经常会遇到
Linux下的静态链接与动态链接
什么是<em>库</em> <em>库</em>是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层<em>库</em>,不可能每个人的代码都从零开始,因此<em>库</em>的存在意义非同寻常。 本质上来说<em>库</em>是一种可执行代码的二进制形式,可以被操作系统载入内存执行。<em>库</em>有两种:<em>静态</em><em>库</em>(.a、.lib)和动态<em>库</em>(.so、.dll) 所谓<em>静态</em>、动态是指<em>链接</em>。回顾一下,将一个程序编译成可执行程...
【Linux】软硬链接和动静态
软硬<em>链接</em>1.硬<em>链接</em>:让多个文件名对应同一个inode创建file的硬<em>链接</em>文件:ln   file  abc删除硬<em>链接</em>在目录中将对应的记录删除在硬<em>链接</em>中删除源文件,文件不会被真正删除,只是将硬<em>链接</em>数-1,如果为0,则将对应的磁盘释放2.软<em>链接</em>:有自己的inode,软<em>链接</em>创建的abc文件是如何找到file(即放的是file的路径,相当于windows下的快捷方式)是通过名字引用另外一个文件创建file...
Linux C++使用动态连接静态的理解
LInux下理解C++编译使用动态连接<em>库</em>,<em>静态</em><em>库</em>,为了更好的理解作为例子说明,以glog日志<em>库</em>为例说明:// 下面是文件test.cpp,调用glog<em>库</em>打印日志的例子#include int main ( int argc , char *c[] ) { FLAGS_log_dir = "." ; // 将生成的日志文件输出到当前执行程序
静态 共享 静态链接 动态链接
<em>库</em>,是一种封装机制,简单说是把所有的源代码编译成目标代码后打成的包.<em>库</em>的开发者除了提供<em>库</em>的目标代码外,还提供一系列的头文件,头文件中就包含了<em>库</em>的接口,<em>库</em>分为<em>静态</em><em>库</em>(static library)和共享<em>库</em>(share library)。在Linux中<em>静态</em><em>库</em>以一种存档(archive)的特殊文件格式存放在磁盘中,由后缀.a标识;共享<em>库</em>通常用.so后缀来表示。win下分别是.lib和.dll   L
Linux-动态链接静态链接对比(动态静态
博客转载自:Linux-动态<em>链接</em>与<em>静态</em><em>链接</em>对比 一、<em>库</em>的基础概念: 在windows平台和<em>linux</em>平台下都大量存在着<em>库</em>。本质上来说<em>库</em>是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和<em>linux</em>的本质不同,因此二者<em>库</em>的二进制是不兼容的。通俗的说就是把这些常用函数的目标文件打包在一起,提供相应函数的接口,便于程序员使用。在使用函数时,只需要包对应的头文件即可。按照<em>库</em>的使用...
Linux 下编译链接静态
Linux 版本是 Red Hat 9 ,内核版本是 2.4.18 输入 which gcc 查看 gcc 的位置在 /usr/bin/gcc gcc -v 查看 gcc 编译前的配置信息 --prefix=/usr 说明了安装目录 没有 --with-headers 说明默认的 include 就在安装目录下 所以 gcc 默认的 include 目录是 /usr/include ,要
linux 链接 静态 undefined reference to
最近将项目移植到<em>linux</em>上,工程需要依赖三个<em>静态</em><em>库</em>:libprojcommon.a libluabind.a liblua.a 依赖关系是projcommon依赖luabind,luabind依赖lua,所以项目最终的<em>链接</em>参数是这样的: -L/home/boy/ProjCommon/lib -lprojcommon -L/home/boy/luabind/lib -lluabind -L/h
Linux环境下静态的生成和使用 (.a文件)
原文地址:http://blog.csdn.net/haojiahuo50401/article/details/7101617 这一阵子的工作用到了<em>linux</em>,也用到了<em>linux</em>的<em>静态</em><em>库</em>和动态<em>库</em>。正好对这一块儿一直不明白,趁此机会学习了一下。以下是笔记。先说一说<em>linux</em>下<em>静态</em><em>库</em>的生成和使用方法。      An archive (or static library) is simp
Linux下静态的制作与使用
<em>静态</em><em>库</em>制作<em>库</em>呢就是二进制文件,当我们给第三方使用我们制造的<em>库</em>时,只需要提供头文件与二进制文件即可,通过头文件,就可以知道调用方法的功能和接口 我们把头文件cal.h放在include中我们在src中新建一个.cpp文件然后我们只需要在src中连起来生成.o文件就好了g++ cal.cpp -c -I ./include/ -c生成二进制文件 -I后跟所包含头文件的相对路径 然后我们就可以通过.
linux动态静态混合连接
在应用程序需要连接外部<em>库</em>的情况下,<em>linux</em>默认对<em>库</em>的连接是使用动态<em>库</em>,在找不到动态<em>库</em>的情况下再选择<em>静态</em><em>库</em>。使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个<em>库</em>libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接<em>静态</em><em>库</em>则使用: gcc test.cpp -L. -static -ltestlib
Linux下C调用静态和动态
Linux下C调用<em>静态</em><em>库</em>和动态<em>库</em>本文主要介绍Linux下C调用<em>静态</em><em>库</em>和动态<em>库</em>,使用的样例文件请点击这里. 样例文件welcome.c:#include #include"welcome.h"void welcome() { printf("welcome to my code world!\n"); } 这是一个样例程序,打印一句话. welcome.h:#ifnde
linux下的静态链接和动态链接(一)
    <em>静态</em><em>链接</em>:<em>静态</em><em>链接</em>就是,在生成可执行程序的时候,把目标文件.o 和 <em>静态</em><em>库</em> .a ,使用 ld <em>链接</em>器,<em>链接</em>生成一个可执行程序。这是在程序加载前就完成的动作。    动态<em>链接</em>:动态<em>链接</em>就是,在生成可执行程序的时候,只是引用的未定义的符号作了标识,到加载到内存中的时候才进行符号重定位。<em>静态</em><em>库</em>的生成:  以 Lib.c为例子,代码如下:#include &amp;lt;stdio.h&amp;gt; voi...
CAD经典程序的实例(希望大家指教)下载
在同学们学习CAD的过程中相信有许多不懂的地方,而在csdn下载频道这个最权威的网站上,作为老师的我发表一些CAD的经典程序,希望大家指教。 相关下载链接:[url=//download.csdn.net/download/star554199169/2824424?utm_source=bbsseo]//download.csdn.net/download/star554199169/2824424?utm_source=bbsseo[/url]
服务创新方法下载
本ppt通过实例与理论相结合,详细地介绍了服务创新方法的各方面内容 相关下载链接:[url=//download.csdn.net/download/lw12200/4955991?utm_source=bbsseo]//download.csdn.net/download/lw12200/4955991?utm_source=bbsseo[/url]
Informatica 地址验证下载
Informatica AddressDoctor可精简地址捕获与验证流程——追加缺失的数据,修正拼写错误和其它错误,并突出显示重复数据——从而降低直接市场营销和客户关系管理(CRM)活动的成本。Informatica AddressDoctor 提供了强大的地址清洗算法,提高并确保全球240多个国家和地区中地址的优异数据质量。Informatica AddressDoctor 通过帮助各组织解决低质量地址数据的难题,提高决策信心,同时为世界范围内的快速信件投递提供便利。 相关下载链接:[url=//download.csdn.net/download/infa2011/5111255?utm_source=bbsseo]//download.csdn.net/download/infa2011/5111255?utm_source=bbsseo[/url]
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件
我们是很有底线的