dependency of static library

一直以来都有一个误区,认为静态库就一定是不含任何依赖的,动态库是含的。这个印象是因为在我们程序中,包含静态库的地方,往往Build好之后直接就可以用,而含DLL的地方,则需要在build好之后的EXE中再加DLL。

那么前几天,遇到了一个问题,程序包含了A.lib之后,发现link fail. How could that be? we found that A.lib dependent on B.lib.(just trough the function name, I wonder if there is any other method)

So, the question is how could A.lib dependent on B.lib? Why B.lib is not included in A.lib?

事实很简单,静态链接库就是一个编译好的目标文件的集合,他并没有链接过,所以他不是最终的.out文件。跟可执行文件不一样。所以,这个依赖关系是可能的。当然我可以产生一个另一版本的A,可以将B完全包含在内。但是一般的A就是我们所编写的代码的和,如果有外部的LIB,就不包在里面了。VS中看有没有地方选??

所以,下一次就知道了,DLL和LIB都有可能有外部依赖。因为他们只是编译之后没有链接的半成品。

时间: 2024-08-08 01:26:35

dependency of static library的相关文章

使用Xcode 5创建Cocoa Touch Static Library(静态库)

转自:http://blog.csdn.net/jymn_chen/article/details/21036035 首先科普一下静态库的相关知识: 程序编译一般需经预处理.编译.汇编和链接几个步骤.对于我们项目中的一些公共代码,如果想要对其进行复用,可以把这些代码编译成一个静态库文件.在链接步骤中,链接器会从库文件中取得对应的代码并生成可执行文件.静态库的执行文件中包含了库中的完整代码,但是多次使用会产生多份冗余拷贝. 静态库和动态库的区别在于静态库在链接阶段被复制,与程序的运行阶段无关:动态

ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)

创建静态库可能出于以下几个理由: 1.你想将工具类代码或者第三方插件快捷的分享给其他人而无需拷贝大量文件.2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级.3.你想将库共享给其他人,但不想让他们看到你的源代码. Xcode6创建静态库详解(Cocoa Touch Static Library) 一.创建静态库文件 打开Xcode, 选择File ----> New ---> Project. 新建工程. 选择iOS ----> Framework & Library -

区别:Use MFC In A Shared DLL 和 Use MFC In A Static Library

摘自:Programming Windows with MFC, 2nd Edition Choosing Use MFC In A Shared DLL minimizes your application's executable filesize by allowing MFC to be accessed from a DLL. If you choose Use MFC In A StaticLibrary instead, Visual C++ links MFC code into

Use MFC in a Static Library 和 use MFC in a Shared

在这个选项上什么时候选哪个? 如果选择use MFC in a Shared DLL 的话,你编译后的程序中不包含MFC库,所以文件会比较小,但是如果你的程序直接移到一个没有安装过MFC的机器上时,可能会导致找不到MFC的DLL. 如果选择Use MFC in a Static Library ,那你编译后的程序就直接包含了调用MFC的部分的库,文件可能会大一些,但是可以直接移到其他机器上运行. 前者是静态链接,发布不用带MFC的DLL文件.    后者是动态连接,发布要带MFC得DLL文件.如

iOS 元件组件-创建静态库static library

概述 在项目开发的过程中,经常使用静态库文件.例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节. 库是一些没有main函数的程序代码集合.除了静态库,还有动态链接库,他们之间的区别是:静态库可以编译到我们的执行代码中,应用程序可以在没有静态库的环境中运行:动态库不能编译到我们的执行代码中,应用程序必须在有链接库文件的环境下运行.另外,动态库在AppStore里,很有可能被拒绝,上架不了. 因而,一般情况下,我们都

iOS在Cocoa Touch Static Library使用CocoaPods

1.在XCode中新建静态库工程:DDLogLib. 2.添加对外暴露接口的头文件DDLogLibHeader.h 3.命令行进入DDLogLib目录,运行pod init,并修改Podfile 4.运行pod install,并打开DDLogLib.xcworkspace. 5.运行pod spec create DDLogLib,创建DDLogLib.podspec文件,并编辑. #  Be sure to run `pod spec lint DDLogLib.podspec' to en

基于pod自动创建:开发静态库(Static Library)

参考:http://blog.csdn.net/youtk21ai/article/details/50750300 http://www.cnblogs.com/brycezhang/p/4117180.html http://www.cocoachina.com/ios/20150228/11206.html 1.执行命令pod lib create TrapezoidButton.在此期间需要确认下面5个问题. What language do you want to use?? [ Sw

Got Stucked in C++ Static Library Loading.. for some time

I used to load library using 1 single .dll file, so when I happen to do method calling between 2 projects in a solution, I got puzzled.. In the solution, doing method calling between projects is constant, so as far as I can see, the dynamic calling m

unrecognized selector sent to class & static library with category problems

一:这里先讲解网络上基本解决方案,解决不了的,直接跳到第二步 1.苹果官方的解决网址:https://developer.apple.com/library/mac/qa/qa1490/_index.html 2.出现这个问题的原因网址:http://www.cnblogs.com/wendingding/p/3893095.html 二:重写编写自己的framework: 在framework中有关出现的category文件全部按照规范的格式进行编写:一个category对应一个.h与.m.