我尝试用cygwin和THEOS
构建一个ios应用程序教程: https://sites.google.com/site/theostutorials/home
经过几次尝试,我成功地完成了本教程的结尾。 最后我只需要运行命令 “make package install”
然后我被卡住了......
CYGWIN TERMINAL:
ron_000@Laptop-Ron ~/projects/hello3
$ make package install
/home/ron_000/projects/hello3/theos/makefiles/targets/Cygwin/iphone.mk:38: Deplo
ying to iOS 3.0 while building for 6.0 will generate armv7-only binaries.
Making all for application hello3...
Copying resource directories into the application wrapper...
Compiling main.m...
main.m:2:2: error: use of undeclared identifier 'NSAutoreleasePool'
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
^
main.m:2:21: error: use of undeclared identifier 'p'
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
^
main.m:2:27: error: use of undeclared identifier 'NSAutoreleasePool'
NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
^
main.m:3:12: error: implicit declaration of function 'UIApplicationMain' is
invalid in C99 [-Werror,-Wimplicit-function-decla`enter code here`ration]
int ret = UIApplicationMain(argc, argv, @"hello3Application", @"...
^
main.m:4:3: error: use of undeclared identifier 'p'
[p drain];
^
5 errors generated.
/home/ron_000/projects/hello3/theos/makefiles/instance/rules.mk:96: recipe for t
arget 'obj/main.m.ce2c1a2b.o' failed
make[2]: *** [obj/main.m.ce2c1a2b.o] Error 1
/home/ron_000/projects/hello3/theos/makefiles/instance/application.mk:39: recipe
for target 'internal-application-all_' failed
make[1]: *** [internal-application-all_] Error 2
/home/ron_000/projects/hello3/theos/makefiles/master/rules.mk:54: recipe for tar
get 'hello3.all.application.variables' failed
make: *** [hello3.all.application.variables] Error 2
有人知道我做错了什么吗?
感谢您提供任何意见,
p.s我希望我能以正确的方式使用codeblock来解决这个问题...
答案 0 :(得分:1)
您是否正在使用ARC进行编译(自动引用计数)?在这种情况下,docs说:
如果使用自动引用计数(ARC),则无法直接使用自动释放池。相反,您使用@autoreleasepool
块。例如,代替:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Code benefitting from a local autorelease pool.
[pool release];
你会写:
@autoreleasepool {
// Code benefitting from a local autorelease pool.
}
可以为单个文件禁用ARC,请参阅here。
答案 1 :(得分:0)
当您看到未声明的标识符时,是时候考虑环境设置
了让我们关注UIApplicationMain。
main.m:3:12:错误:隐含声明功能' UIApplicationMain'是 在C99中无效[-Werror,-Wimplicit-function-decla
enter code here
ration] int ret = UIApplicationMain(argc,argv,@" hello3Application",@" ...
如文档中所述,这个类应该是应用程序的所有内容的开始,因此它必须位于theos设置中的某个位置...
如果你从项目中挖掘theos符号链接
$ cd /to/your/project/dir/theos
$ grep UIKit.h * -C 5
Prefix.pch-#ifdef __OBJC__
Prefix.pch- #import <Foundation/Foundation.h>
Prefix.pch- #if TARGET_IPHONE || TARGET_IPHONE_SIMULATOR
Prefix.pch: #import <UIKit/UIKit.h>
Prefix.pch- #endif
Prefix.pch-
Prefix.pch- #define CLASS(cls) objc_getClass(#cls)
Prefix.pch-
Prefix.pch- #ifdef DEBUG
你会看到UIKit.h是自动导入的,所以不是问题。
查找该文件
$ find -name UIKit.h
./sdks/iPhoneOS7.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h
如果那个文件确实存在那么,可能是什么问题?让我们详细查看该文件
$ find -name UIKit.h -exec ls -la \{} \;
-rw-r--r-- 1 root wheel 4454 Jul 19 11:14 ./sdks/iPhoneOS7.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIKit.h
如果您的文件显示0字节而不是您的问题,那么根本就没有定义!
从xcode.dmg文件中提取sdk似乎是超级复杂的。 This answer几乎可以解决问题,但检查挂载的文件显示其中许多文件的0字节。
尝试从真正的Xcode安装中获取sdk,如果这是你的问题,我打赌它是!