在Windows平台上编写Objective-C的最佳方法是什么?
Cygwin和gcc?有没有办法可以将它集成到Visual Studio中?
沿着这些方向 - 是否有任何关于如何链接和使用Windows SDK的建议.它是一个不同的野兽,但我知道我可以在Windows DLL中编写汇编和链接,让我可以访问这些调用,但我不知道如何做到这一点,没有谷歌搜索和零碎的方向.
是否有人知道一个好的在线或书籍资源来做或解释这些事情?
扩展前两个答案,如果您只想要Objective-C而不是任何Cocoa框架,那么gcc将适用于任何平台.您可以通过Cygwin使用它或获得MinGW.但是,如果你想要Cocoa框架,或者至少是它们的合理子集,那么GNUStep和Cocotron是你最好的选择.
Cocotron实现了很多GNUStep没有的东西,比如CoreGraphics和CoreData,尽管我不能保证它们在特定框架上的实现有多完整.他们的目标是使Cocotron与最新版本的OS X保持同步,以便任何可行的OS X程序都可以在Windows上运行.由于GNUStep通常使用最新版本的gcc,因此它们还增加了对Objective-C++和许多Objective-C 2.0功能的支持.
我没有使用GNUStep测试这些功能,但是如果你使用足够新版本的gcc,你可能可以使用它们.几年前我无法在GNUStep中使用Objective-C++.但是,GNUStep几乎可以从任何平台编译.Cocotron是一个非常以mac为中心的项目.虽然可能在其他平台上编译它,但它来自XCode项目文件,而不是makefile,所以你只能在OS X上编译它的框架.它还附带有关在XCode上编译Windows应用程序的说明,但不是任何其他平台.基本上,可能可以为Cocotron设置一个Windows开发环境,但它并不像为GNUStep设置一样容易,而且你可以自己动手,所以如果你正在开发GNUStep肯定是要走的路. Windows而不是Windows.
对于它的价值,Cocotron是根据MIT许可证授权的,GNUStep是根据LGPL许可的.
您可以在Windows环境中使用Objective C. 如果你按照这些步骤,它应该工作得很好:
访问GNUstep网站并下载GNUstep MSYS Subsystem
(MSYS for GNUstep),GNUstep Core
(GNUstep库),以及GNUstep Devel
下载这些文件后,按顺序安装,否则您将遇到配置问题
导航到C:\GNUstep\GNUstep\System\Library\Headers\Foundation
1并确保Foundation.h
存在
打开一个命令提示符并运行gcc -v
以检查是否GNUstep MSYS
已正确安装(如果找不到文件错误,请确保该bin
文件夹GNUstep MSYS
位于您的文件夹中PATH
)
使用这个简单的"Hello World"程序来测试GNUstep的功能:
#includeint main(void) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSLog(@"Hello World!."); [pool drain]; return; }
返回命令提示符并cd
保存"Hello World"程序,然后编译它:2
gcc -o helloworld.exe.m -I /GNUstep/GNUstep/System/Library/Headers -L /GNUstep/GNUstep/System/Library/Libraries -std=c99 -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
最后,从命令提示符处键入helloworld
以运行它
一切顺利,与Objective-C玩得开心!
注意:
我使用了默认安装路径 - 相应地调整命令行
确保您的文件夹路径与我的相似,否则您将收到错误
也:
Cocotron是一个开源项目,旨在实现类似于Apple Inc.的Cocoa文档所描述的跨平台Objective-C API.这包括AppKit,Foundation,Objective-C运行时和支持API,如CoreGraphics和CoreFoundation.
http://www.cocotron.org/
WinObjC?适用于iOS的Windows Bridge(以前称为"Project Islandwood").
Windows Bridge for iOS(也称为WinObjC)是一个Microsoft开源项目,为Visual Studio/Windows提供Objective-C开发环境.此外,WinObjC还支持iOS API兼容性.虽然最终版本将在今年秋季晚些时候发布(允许桥接器利用随即将推出的Visual Studio 2015更新提供的新工具功能),
现在处于当前状态的开源社区可以使用该桥.从现在到秋天.iOS桥作为MIT许可下的开源项目.鉴于该项目的雄心壮志,iOS开发人员可以轻松地在Windows上构建和运行应用程序.
Salmaan Ahmed在Windows Bridge for iOS上有一篇深入的帖子http://blogs.windows.com/buildingapps/2015/08/06/windows-bridge-for-ios-lets-open-this-up/讨论了编译器,运行时,IDE集成以及桥是什么和不是什么.最重要的是,iOS桥的源代码现在正在GitHub上运行.
iOS桥接器支持为x86和x64处理器架构构建的Windows 8.1和Windows 10应用程序,很快我们将添加编译器优化和ARM支持,从而增加了移动支持.
我对Cocotron项目的看法很复杂.我很高兴他们发布了源代码和共享,但我不觉得他们是以最简单的方式做事.
例子.
Apple已将源代码发布到objective-c运行时,其中包括属性和垃圾收集.然而,Cocotron项目有自己的objective-c运行时实现.为什么要费心去复制呢?甚至还有一个Visual Studio Project文件可用于构建objc.dll文件.或者,如果你真的很懒,你可以从Windows上的Safari安装中复制DLL文件.
他们也没有费心去利用CoreFoundation,后者也是Apple开源的.我发布了一个关于此的问题,但没有得到答案.
我认为目前最好的解决方案是从多个来源(Apple,CocoTron,GnuStep)获取源代码并将它们合并到您需要的地方.你必须阅读很多来源,但最终的结果是值得的.
我知道这是一篇非常古老的帖子,但我找到了一个最近才可用的解决方案,并在Windows平台上启用了几乎所有的Objective-C 2.0功能.
随着gcc 4.6的出现,Objective-C 2.0编译器中添加了对Objective-C 2.0语言功能(块,点语法,合成属性等)的支持(有关完整详细信息,请参阅发行说明).他们的运行时也已更新,几乎与Apple自己的Objective-C 2.0运行时相同.简而言之,这意味着(几乎)任何将在Mac上与Clang合法编译的程序也将使用gcc 4.6进行编译而无需修改.
作为旁注,一个不可用的功能是字典/数组/等文字,因为它们都被硬编码成Clang以使用Apple的NSDictionary,NSArray,NSNumber等类.
但是,如果你很高兴没有Apple的广泛框架,你可以.正如其他答案中所述,GNUStep和Cocotron提供了Apple类库的修改版本,或者您可以编写自己的(我的首选选项).
MinGW是在Windows平台上获得GCC 4.6的一种方式,可以从MinGW网站下载.确保在安装时包含C,C++,Objective-C和Objective-C++的安装.虽然是可选的,但我还是建议安装MSYS环境.
安装完成后,可以编译Objective-C 2.0源代码:
gcc MyFile.m -lobjc -std=c99 -fobjc-exceptions -fconstant-string-class=clsname (etc, additional flags, see documentation)
MinGW还支持使用-mwindows
标志编译本机GUI Windows应用程序.例如:
g++ -mwindows MyFile.cpp
我还没有尝试过,但我想如果你将Objective-C类包装在最高层的Objective-C++中,你应该能够在一个Windows应用程序中成功地将本机Windows GUI C++和Objective-C交织在一起.
查看WinObjC:
https://github.com/Microsoft/WinObjC
这是Microsoft的一个官方开源项目,它与Visual Studio + Windows集成.
如果您只是想进行实验,那么这里有一个针对.NET(Windows)的Objective-C编译器:qckapp
您可以获得一个可与Windows一起使用的目标c编译器,并在此处与Visual Studio 2008\2010一起使用.
open-c flite
只需下载最新的来源.您不需要构建所有CF-Lite,而是有一个名为objc.sln的解决方案.您将需要修复一些包含路径,但随后它将构建得很好.甚至还有一个测试项目,所以你可以看到一些Objective-c .m文件正在编译并在visual studio中工作.一件令人伤心的事情是它只适用于Win32而不是x64.有一些汇编代码需要为x64编写才能支持它.