在Windows平台上编写Objective-C的最佳方法是什么?
Cygwin和gcc?有什么方法可以将其集成到Visual Studio中吗?
沿着这些思路,关于如何链接和使用Windows SDK之类的东西,有任何建议。它是另一种野兽,但是我知道我可以在Windows DLL中编写汇编和链接,使我可以访问这些调用,但是我不知道如何在不进行谷歌搜索和获得零碎指导的情况下进行操作。
有没有人知道一个很好的在线或书籍资源来做或解释这些事情?
在Windows平台上编写Objective-C的最佳方法是什么?
Cygwin和gcc?有什么方法可以将其集成到Visual Studio中吗?
沿着这些思路,关于如何链接和使用Windows SDK之类的东西,有任何建议。它是另一种野兽,但是我知道我可以在Windows DLL中编写汇编和链接,使我可以访问这些调用,但是我不知道如何在不进行谷歌搜索和获得零碎指导的情况下进行操作。
有没有人知道一个很好的在线或书籍资源来做或解释这些事情?
Answers:
扩展前面的两个答案,如果您只想使用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上进行开发,那么GNUStep绝对是必经之路Windows,而不只是Windows。
就其价值而言,Cocotron已获得MIT许可,而GNUStep已获得LGPL许可。
您可以在Windows环境中使用ObjectiveC。如果您按照这些步骤,它应该可以正常工作:
GNUstep MSYS Subsystem
(对于GNUstep为MSYS),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的功能:
#include <Foundation/Foundation.h>
int main(void)
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Hello World!.");
[pool drain];
return;
}
返回命令提示符以及cd
保存“ Hello World”程序的位置,然后对其进行编译:2
gcc -o helloworld.exe <HELLOWORLD>.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一起玩乐!
注意事项:
gcc -o helloworld...
了c:\gnustep\bin\gcc -o helloworld...
,它奏效了。另一种选择是修改环境变量,因为我只是看到目标C,所以我没有这样做。感谢teshguru给出了正确的答案。
也:
Cocotron是一个开源项目,旨在实现类似于Apple Inc. Cocoa文档中描述的跨平台的Objective-C API。这包括AppKit,Foundation,Objective-C运行时和支持API,例如CoreGraphics和CoreFoundation。
WinObjC?适用于iOS的Windows Bridge(以前称为“ Project Islandwood”)。
Windows Bridge for iOS(也称为WinObjC)是Microsoft开源项目,为Visual Studio / Windows提供了Objective-C开发环境。此外,WinObjC还提供了对iOS API兼容性的支持。虽然最终版本将在今年秋天晚些时候发布(允许桥梁利用即将推出的Visual Studio 2015 Update附带的新工具功能),
目前,开放源社区可以使用此桥。从现在到秋天。iOS桥是MIT许可下的开源项目。鉴于该项目的雄心壮志,iOS开发人员可以轻松在Windows上构建和运行应用程序。
Salmaan Ahmed在iOS的Windows Bridge上有深入的文章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编译器中(有关详细信息,请参见发行说明)。它们的运行时也已更新,几乎可以与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交织在一起。
您可以在此处获得可与Windows一起使用并与Visual Studio 2008 \ 2010完美配合的目标c编译器。
只需下载最新资源。您不需要构建所有CF-Lite,而有一个名为objc.sln的解决方案。您将需要修复一些包含路径,但随后它将构建良好。甚至包括一个测试项目,因此您可以看到正在Visual Studio中编译并工作的一些Objective-c .m文件。一件可悲的事情是,它仅适用于Win32,而不适用于x64。为了支持x64,需要为x64编写一些汇编代码。
将Objective C 2.0移植到Windows的最新尝试是主观项目。
从自述文件:
主观的尝试是将带有ARC支持的Objective C 2.0引入Windows。
该项目是objc4-532.2(OS X 10.8.5附带的Objective C运行时)的分支。可以使用llvm-clang和MinGW链接器在OS X上交叉编译该端口。
存在某些局限性,其中许多局限性在于额外的工作,而其他一些局限性,例如例外和阻止,则取决于第三方项目中更认真的工作。限制是:
•仅32位-正在进行64位
•仅静态链接-动态链接正在进行中
•没有闭包/块-直到libdispatch在Windows上支持它们
•无例外-直到clang在Windows上支持它们为止
•没有旧式GC-除非有人在乎...
•内部:没有vtables,没有gdb支持,只是纯malloc,没有预优化-其中一些功能将在64位版本下可用。
•当前需要修补的clang编译器;该补丁添加了-fobjc-runtime = subj标志
如果您对Visual Studio环境感到满意,
小型项目:带有gcc的jGRASP大型项目:Cocotron
我听说有模拟器,但是我只能找到Apple II模拟器http://virtualapple.org/。看起来仅限于游戏。
首先,忘记GNUStep工具。无论ProjectManager也不ProjectCenter中可以被称为一个IDE。出于所有应有的尊重,看起来GNUStep项目的家伙陷入了80年代后期(那时NeXTSTEP首次出现时)。
ctags
从r771开始支持Objective-C (请务必选择5.9之前的版本并添加--langmap=ObjectiveC:.m.h
到命令行,请参见此处),这样您将获得不错的代码完成/标签导航。
这里是一个简短的HOWTO上的Vim tagbar插件添加Objective-C的支持。
这同样适用于etags
现代Emacsen附带的产品,因此您可以从Emacs Objective C Mode开始。YASnippet将提供有用的模板:
如果您想获得比基于标记的基本代码完成更智能的功能,请看一下这个问题。
CDT支持Makefile
基于项目的项目:
-因此从技术上讲,您可以开箱即用地构建Objective-C项目(在Windows上,您将需要Cygwin或MinGW工具链)。唯一的问题是代码编辑器,它将针对纯C代码报告大量错误(可以关闭即时代码检查,但仍然...)。如果要正确突出显示语法,可以将Eclim添加到Eclipse中,并享受Eclipse和Vim的所有出色功能(请参见上文)。
另一个有前途的Eclipse插件是Colorer,但是它到目前为止还不支持Objective-C。不过请随时提出功能请求。
SlickEdit的,除其他功能有很大的IDE,不 支持 Objective-C的。虽然学习起来相当复杂(尽管不像Emacs那样复杂),但我相信这是您最好的选择,只要您不介意购买它(价格相当合理)。
此外,它还有一个Eclipse插件,可以用作独立编辑器的替代方法。
有传言说它存在一个KDevelop 补丁(15岁,但是谁在乎?)。我个人认为KDevelop与Emacsen相比没有功能上的优势,因此我不会去尝试。
上面的内容也适用于Linux上的Objective-C开发,因为提到的所有工具或多或少都具有可移植性。