相关疑难解决方法(0)

链接静态库,共享另一个静态库

我目前有一个非常大的代码库的Xcode项目,我称之为Project X,我将其划分为一堆子项目(项目A,B,C).

到目前为止,这些项目中的每一个都可以自行编译.它们都产生静态库.项目B项目C依赖于项目A生成的静态库以进行构建.

我有另一个xcode项目,Project Z,它需要Projects B和C生成的静态库.这就是问题所在.当Project Z进入链接器阶段时,事情就会爆发 - 在项目B和C的库中找到重复的符号,用于它们最初在项目A中链接的代码!

我对静态库世界很陌生,我不确定如何推进Project Z,或者如何修改其他项目以便它们链接到同一个Project A lib.我觉得这是不可能的.我有什么选择?

编辑:

我应该澄清,项目B项目C需要构建成单独的静态库,因为一些客户端只需要一个或另一个.

此外,我在OSX和iOS平台上都遇到了这种困境.

我意识到我可以通过将项目构建为动态库来解决OSX上的这个问题.但是,我不想这样做,它仍然让我在iOS上遇到同样的问题.

xcode linker static-libraries

14
推荐指数
1
解决办法
9999
查看次数

在动态(Cocoa Touch)框架内链接静态库

我有一个动态框架,它链接到谷歌地图(据我所知,它仍然是一种静态库,如果不是那样,只需要一个框架包装器).

问题是框​​架链接到静态库并且似乎也直接包含其代码,因为我不需要在使用框架的应用程序中链接或嵌入Google Maps,一切正常.除非我在应用内部使用Google地图.

要么在编译阶段我得到"架构XY的未定义符号",要么我将谷歌地图链接到它,然后我在app-launch期间在调试控制台中收到警告墙,如:

类GMSPolyline2D在/.../Build/Products/Debug-iphonesimulator/MyFramework.framework/MyFramework和/..../Bundle/Application/7C73324B-4A42-4063-98AA-879345997DE6/MyApp.app/MyApp中实现.将使用两者之一.哪一个未定义.

有没有办法只在框架中链接谷歌地图,但不包括框架产品中的符号?它适用于动态框架,但静态库似乎只是包含在内.我已经尝试使用-weak_framework和弱连接-weak_library,但它似乎不起作用.

实际上,我无法让Xcode -weak_library在其框架目录中找到GoogleMaps二进制文件,即使在.framework文件夹中直接链接为Library Search Path也是如此.

由于我是我框架的唯一用户,因此我可以强制执行使用框架DOES的每个应用程序都包含Google Maps框架.到目前为止,除了警告之外,应用程序工作正常(到目前为止,在运行时使用哪两个类无关紧要,因为两者都应该相同).但是,如果有更好的解决方案,我会睡得更好:)


编辑:我可以通过直接在linker-flag部分中移交绝对路径而不是使用Library Search Path设置来使-weak_library工作.但问题仍然存在,显然它仍然包含在框架中.

xcode cocoa-touch objective-c ios google-maps-sdk-ios

11
推荐指数
1
解决办法
2550
查看次数

为什么iOS框架依赖项在为应用程序项目执行时不需要显式链接到静态库项目或框架项目?

为什么恰好是它,当我在Xcode中创建一个iOS的静态库项目或框架项目,我不需要为了使用它们的标题和对象的任何iOS版SDK框架链接到项目-例如,我可以#import <AudioToolbox/AudioToolbox.h>并将AudioToolbox代码放在静态库或框架中,而无需在构建设置中的"Link Binary with Libraries"下添加AudioToolbox或将其存在于文件导航器中,并且项目将无问题地构建,这在某些情况下无效应用程序项目 - 但是当开发人员在应用程序中使用静态库或框架产品时,他们必须链接到框架才能使用相同的标头和对象?

我有一个模糊的想法,为什么会这样,但我真的很想听到一个肯定知道的人.

xcode gcc objective-c llvm static-libraries

6
推荐指数
1
解决办法
2959
查看次数

重复的符号错误:SBJsonParser.o?

我目前在我的项目中有ShareKit,它被编译为静态库.它已得到妥善实施.我还通过将他们的框架添加到我的项目中来实现亚马逊的AWS SDK.

似乎重复的符号来自亚马逊的AWS SDK文件"AWSIOSSDK".这就是它的样子:

在此输入图像描述

该文件与ShareKit的文件libShareKit.a发生冲突.这是该文件的样子:

在此输入图像描述

无论如何,这些文件都是我以前从未见过的文件.似乎有些JSON文件在它们之间发生冲突.

我已经查看了其他SO问题,并且他们说要使用已编译的源代码执行某些操作,但这些文件都不在任何库的编译源中.

这是Xcode给出的确切错误:

ld: duplicate symbol _OBJC_CLASS_$_SBJsonParser
Run Code Online (Sandbox Code Playgroud)

无论如何,有没有人有任何想法我应该做什么?除非我解决这个问题,否则我的应用程序无法编译

谢谢!

symbols duplicates ios sbjson

5
推荐指数
2
解决办法
2434
查看次数