Tag: gcc

结构填充编译标志

typedef struct{ char t1; long long t2; char t3; }struct_size_test; printf("sizeof(long long)==[%ld]\n", sizeof(long long)); printf("sizeof(char)==[%ld]\n", sizeof(char)); printf("sizeof(struct_size_test)==[%ld]\n", sizeof(struct_size_test)); iOS中和OS X gcc中的struct_size_test的结果是不同的。 在iOS中的结果是 sizeof(long long)==[8] sizeof(char)==[1] sizeof(struct_size_test)==[24] 但是OS X gcc的结果是 sizeof(long long)==[8] sizeof(char)==[1] sizeof(struct_size_test)==[16] 我GOOGLE了这个,并发现一些build议,添加“-malign-double”作为gcc编译标志。 但是它表明 clang: error: unknown argument: '-malign-double' [-Wunused-command-line-argument-hard-error-in-future] clang: note: this will be a hard error (cannot be downgraded to a warning) […]

如何链接iOS的静态库

我创build了一堆.o文件(通过gcc -c $file.c $someotherops -o $file.o )。 现在我想将它们链接到一个静态库。 我不完全确定我是否应该使用ld或gcc 。 在ld手册中,据说我不应该直接使用它。 但是,我无法弄清楚创build静态库的gcc参数。 我试过ld *.o -static -o libfoo.a但它抱怨了很多丢失的符号(我认为所有的libc)。 我不明白为什么它抱怨,因为它应该是一个静态库。 我认为一旦我将静态库链接到其他的东西,就会检查符号。 另一件事:我在这里使用/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ld (我的目标是iOS)。 它抱怨警告ld: warning: using ld_classic 。 这是关于什么的? 然后我想,也许它需要指定dynamic库。 所以我加了-lc来链接libc。 但它抱怨与can't locate file for: -lc 。 我添加了-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib并且有一个libc.dylib 。 有任何想法吗? 关于-lc错误:在我指定了-arch armv6之后,它就离开了。 然后它抱怨一个错误的libcache.dylib (它必须链接从libc.dylib我猜,因为它没有指定它)。 添加-L…/usr/lib/system帮助。 现在,对于每个.o文件,我都会得到警告ld: warning: CPU_SUBTYPE_ARM_ALL subtype is deprecated 。 这是关于什么的? 而且我还有一堆缺less的符号,特别是: Undefined symbols for […]

无法用XCode / Obj-C编译Cocoapods – “Pods-prefix.pch.dia:没有这样的文件或目录”

我正在使用XCode 4.5.1和iOS 6.0基础SDK。 这是我收到的错误: i686-apple-darwin11-llvm-gcc-4.2: /Users/fahim/Library/Developer/Xcode/DerivedData/Currenthiphop-emodxxwwaiojlcboaxuodksuwuww/Build/Intermediates/PrecompiledHeaders/Pods-prefix-evibdktwbatdnbabmrlnderfsxxi/Pods-prefix.pch.dia: No such file or directory Pods-prefix-xxx目录中只有一个文件: Pods-prefix.pch.pth.hash-criteria 这是我的Podfile:platform:ios pod 'LibComponentLogging-Core' pod 'LibComponentLogging-LogFile' pod 'LibComponentLogging-qlog' pod 'LibComponentLogging-pods' pod 'Facebook-iOS-SDK' pod 'RestKit' 任何帮助表示赞赏。 谢谢!

在Objective-C中使用GCC C扩展(语句expression式)进行初始化

GNU C提供了几种在标准C中没有的语言特性。这些扩展在C和Objective-C中可用。 有一个GCC C扩展(称为语句expression式 ),如果它们也被圆括号包围,则会导致由大括号包围的语句序列返回一个值: self.searchBar = ({ UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:({ CGRect frame = self.tableView.frame; frame.size.height = 100.0f; frame; })]; searchBar.delegate = self; searchBar; }); 在这个构造中,括号围绕括号。 最后一个语句的值作为整个构造的值,所以我们可以将它用于初始化和赋值等等。 这个初始化结构有很多优点: 清晰简洁 初始化中的configuration细节 范围较小 genericsvariables名称可以重用 有什么不利之处,或者这是否是标准做法? 我们是否应该从现在开始这样做?

通过Xcodescheme添加预处理器定义

我目前有一个iPhone应用程序,我需要build立一些特殊的“味道”。 理想情况下,我想有一个每个“风味”的计划,每个scheme将定义(或设置)一个或多个预处理器的定义,我可以使用分支在我的代码甚至可能预处理我的info.plist文件。 这显然可以用多个目标来完成,但由于我可以有很多不同的应用程序的“风味”,这是很好的方法来保持目标的计数。 我目前的想法是在预执行脚本期间添加这些预处理器定义,但是我不能在我的生活中find更新GCC_PREPROCESSOR_DEFINITIONS的方法。 由于它是一个环境variables,我不应该有权访问GCC_PREPROCESSOR_DEFINITIONS?

TARGET_OS_IPHONE和ApplicationTests

为什么在编译ApplicationTestsunit testing包时这个代码不工作? #if TARGET_OS_IPHONE #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #else #import <Cocoa/Cocoa.h> #endif 我的一个依赖项有这个检查,并且在我的主应用程序包中编译得很好,但是它在编译我的ApplicationTests包时试图加载<Cocoa/Cocoa.h> 。 这可能只是我对XCode的理解不足,但是当我的testing包不能构build时,我会感到紧张。 有什么build议么?

如何在Xcode 5上findarm-apple-darwin#-llvm-gcc-4.2编译器?

我正在交叉编译,为此我需要findXcode在哪里放置arm-gcc compiller。 它曾经在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2,但它已经在Xcode 5中消失了。 有任何想法吗?

__unused标志的行为/用法(目标C的GCC)

我刚才了解到编译GCC时可以使用的__unused标志,我学到的东西越多,问题越多… 为什么这个编译没有警告/错误? 看起来很奇怪,我专门告诉编译器我不会使用一个variables,那么当我使用它时,事情就像正常一样进行。 – (void)viewDidLoad { [super viewDidLoad]; [self foo:0]; } – (void)foo:(NSInteger)__unused myInt { myInt++; NSLog(@"myInt: %d", myInt); // Logs '1' } 另外,以下两个方法签名有什么区别? – (void)foo:(NSInteger)__unused myInt; – (void)foo:(NSInteger)myInt __unused;

在Xcode 4.2和iOS SDK 5.0中使用gcc 4.2

我今天早些时候升级到了Xcode 4.2和iOS SDK 5。 但是新编译器的一切似乎都不一样。 现在有两个“C / C ++ / Objective-C编译器”选项,“Apple LLVM编译器3.0”和“LLVM GCC 4.2”。 GCC 4.2缺失。 苹果LLVM编译器3.0,构build真快(我喜欢这样),给我999 +警告,我的游戏不能再运行。 看起来内存有些不同,加载我们游戏的脚本时崩溃了。 LLVM GCC 4.2是如此神速,我仍然无法在我的i7机器上完成一个小时后的构build。 而且,还有一件事是我们的引擎使用gcc命令行来构build(而不是xcode)。 所以,这导致了一个问题, 我如何在Xcode 4.2中使用gcc 4.2 ? 这甚至可能吗?

如果一个子类引用一个超级伊娃,合成一个不相关的属性失败

编辑:我只是注意到这个其他堆栈溢出问题要求很多相同的事情: 为什么一个子类@property没有相应的伊娃隐藏超类ivars? 这是一些有趣的行为,我无法在官方或非官方(博客,鸣叫,SO问题等)中findlogging。 我把它解释成它的本质,并在一个新的Xcode项目中进行了testing,但我无法解释它。 MyBaseClass有一个实例variables: @interface MyBaseClass : NSObject { NSObject *fooInstanceVar; } @end MySubclass扩展了MyBaseClass,并声明了一个完全不相关的属性(也就是说,该属性不打算由实例variables支持): #import "MyBaseClass.h" @interface MySubclass : MyBaseClass { } @property (nonatomic, retain) NSObject *barProperty; @end 如果MySubclass的实现不合成属性,但实现访问器方法,一切都很好(没有编译器错误): #import "MySubclass.h" @implementation MySubclass – (NSObject*)barProperty { return [[NSObject alloc] init]; // pls ignore flagrant violation of memory rules. } – (void)setBarProperty:(NSObject *)obj { /* […]