如何在Visual Studio 2010中指定库文件的链接顺序?
我有一个项目链接libexpat和另一个库.这个库(不在我的控制之下)似乎也包括libexpat.问题是'我们'使用不同版本的库(XML_UNICODE vs不).在Visual Studio 2008中,似乎没有问题(可能是巧合),但在Visual Studio 2010中,libexpat的错误实例已链接.我想如果我可以指定这两个库应该链接的顺序,那么我可以绕过这个问题.
我的问题类似于这个问题,但主要区别在于我正在使用类方法.一些代码:
OpenFeint的+ private.h
@interface OpenFeint (Private)
// ...
+ (void) createSharedInstance;
Run Code Online (Sandbox Code Playgroud)
OpenFeint的+ private.mm
+ (void) createSharedInstance
{
//...
}
Run Code Online (Sandbox Code Playgroud)
OpenFeint.mm
+ (void) initializeWithProductKey:(NSString*)productKey
andSecret:(NSString*)productSecret
andDisplayName:(NSString*)displayName
andSettings:(NSDictionary*)settings
andDelegates:(OFDelegatesContainer*)delegatesContainer
{
[OpenFeint createSharedInstance];
// ...
Run Code Online (Sandbox Code Playgroud)
MyApp.mm:
// ...
#import "OpenFeint.h"
// ...
[OpenFeint initializeWithProductKey: OF_PRODUCT_KEY
andSecret: OF_PRODUCT_SECRET
andDisplayName: OF_DISPLAY_NAME
andSettings: openFeintSettings
andDelegates: [OFDelegatesContainer containerWithOpenFeintDelegate: self]];
Run Code Online (Sandbox Code Playgroud)
错误是:
2010-07-22 11:30:15.239 MyApp[20210:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[OpenFeint createSharedInstance]: unrecognized selector sent to class 0x1cdb1c'
*** Call stack at first …Run Code Online (Sandbox Code Playgroud) 我正在研究几个iOS项目,这些项目将有很多共享代码,所以我在静态库中收集这些代码.
现在让我们说我有3个静态库我正在使用:
(和A是B和C的依赖关系)
现在,我的最终项目需要利用所有三个库的功能.我知道A可以与B,C和我的最终项目静态链接,但是在那时我会得到一个链接器错误,因为有多个相同类的实现.
应如何处理这种情况?
我借助这个模板构建了通用静态库
问题是我的库libWrapper.a的大小是1.3 MB?:0,而我的源代码有130 kb.
我如何减少静态库的大小?
其他奇怪的事情 -

每个lib都具有相同的大小 - 1.3 MB.我认为通用(胖)库应该有更大的尺寸.
我有一个两个静态库a.lib和b.lib(C语言),它是使用VC6(Visual Studio 6.0)生成的.
我想将这两个库合并到一个静态库中c.lib.如何在CLI模式下执行此操作?
我有一个胖(armv7 + i386)库我现在用于开发.工作正常,但现在我担心Xcode是否会在构建发布时剥离其他架构(i386)和其他配置(例如Debug)?
我不打算调试这个库,因为它非常古老而且稳定.我只想使用它,所以我想我不需要所有的调试符号(?),而且当构建发布时我甚至不需要i386,因为那是模拟器.
我是否需要在Xcode中设置一些东西以便它被剥离或者我最好使用非胖库?如果是这样我该如何控制呢?:)
这个库大约有500KB,所以我不想提供超出我需要的信息.
我正在尝试在多个Xcode项目之间共享代码.我已经按照Apple关于在项目中创建静态库子项目的说明:
http://developer.apple.com/library/ios/technotes/iOSStaticLibraries/iOSStaticLibraries.pdf
这很棒!但是,当我使用自己的项目遵循相同的说明时,我发现我的应用程序中的代码无法找到我在静态库中公开的头文件.
这是因为我的项目使用自定义构建配置.我有一个用于Ad Hoc构建,App Store构建等.
例如:当我使用名为"Ad Hoc"的构建配置构建项目时,静态库子项目构建Release配置并将其公共头文件复制到名为"Release"的文件夹中.然后主项目无法构建,抱怨它无法找到我从静态库导入的标头.错误在问题导航器中显示为:词法或预处理程序问题
所以我的问题是:如何将静态库设置为项目的子项目,该项目具有库不具备的构建配置?
MFC已经定义了这样的
#ifdef UNICODE
#define DrawText DrawTextW
#else
#define DrawText DrawTextA
#endif // !UNICODE
Run Code Online (Sandbox Code Playgroud)
但是我正在使用一个也有DrawText()函数的库,我猜MFC也定义了这个调用的变化,我收到了这个调用的链接器错误,因为很明显这个库没有名称为DrawTextW(...)的函数
如何使库函数在我的MFC应用程序中工作?
我有两个项目,每个项目构建一个静态库,以及另一个使用两个静态库的项目.
两个静态库中的一个构建正常.另一个没有,原因是它的公共头文件在自定义shell脚本运行之前没有复制到build文件夹.
以下是对所发生情况的演示:
SampleA(工作的那个)
Compile MyClass1.cpp ...
Compile MyClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleA.a ...
Copy SampleA.h ...in /Users/user/....
Copy MyClass1.h ...in /Users/user/....
Copy MyClass2.h ...in /Users/user/....
Run custom shell script 'Prepare Framework'
Stripping libSampleA.a
--- Build complete
Run Code Online (Sandbox Code Playgroud)
SampleB(不起作用的那个)
Compile OtherClass1.cpp ...
Compile OtherClass2.cpp ...
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Libtool /Users/user/Library/Developer/XCode/DerivedData/.....
Create universal binary libSampleB.a ...
// >>>>> NO HEADER FILES ARE COPIED <<<<<<
Run custom shell script …Run Code Online (Sandbox Code Playgroud) static-libraries ×10
ios ×5
xcode ×5
iphone ×3
c++ ×2
objective-c ×2
visual-c++ ×2
archiving ×1
build ×1
c ×1
linker ×1
merge ×1
mfc ×1
unicode ×1
xcode5 ×1