我正在探索在Windows上使用GNUstep编译应用程序。这是我的main.m文件:
#import <???/???.h>
int main(int argc, const char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[NSApplication sharedApplication];
[pool release];
}
我意识到这是一个不完整的片段,至少可以说它显然不会做任何事情。我已经尝试了几个不同的import语句,包括Cocoa / Cocoa.h,GNUstepGUI / GMAppKit.h等。但是我总是遇到编译错误,我似乎无法在网上找到帮助。
这是我的编译命令,我从mingw shell运行:
gcc -o test main.m -I /GNUstep/System/Library/Headers/ \ -L /GNUstep/System/Library/Libraries/ -lobjc -lgnustep-base \ -fconstant-string-class=NSConstantString -enable-auto-import
这些是我得到的错误:
c:/WINDOWS/TEMP/ccHxKZG2.o:main.m(.data+0x390): undefined reference to '___objc_class_name_NSApplication' collect2:ld returned 1 exit status
关于#import需要什么,或者我的编译命令需要修复什么的想法?
谢谢!
答案 0 :(得分:4)
感谢Peter Hosey,我能够将Google自己带到页面上并给出答案:
http://psurobotics.org/wiki/index.php?title=Objective-C
与OS X开发不同,您需要一个“makefile”:
将此文件放入与源名相同的目录中名为“GNUmakefile”的文件中:
include $(GNUSTEP_MAKEFILES)/common.make APP_NAME = MyAppName MyAppName_HEADERS = MyAppName_OBJC_FILES = main.m MyAppName_RESOURCE_FILES = include $(GNUSTEP_MAKEFILES)/application.make
然后执行
make
该页面表示执行
openapp ./MyAppName.app但.app文件夹中的.exe文件似乎独立运行。
答案 1 :(得分:3)
这是一个链接器错误。 #import
是预处理程序指令;它不会解决链接中的错误,无论如何,如果你有一个预处理器错误,你就不会有链接。
你需要链接到Foundation和AppKit(特别是后者,对于NSApplication),或任何GNUstep的等价物。
答案 2 :(得分:0)
在Linux下,您可以使用gcc进行编译:
public async Task<HttpResponseMessage> PostFormData() { // Check if the request contains multipart/form-data. if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string root = HttpContext.Current.Server.MapPath("~/App_Data"); var provider = new MultipartFormDataStreamProvider(root); try { // Read the form data. await Request.Content.ReadAsMultipartAsync(provider); // This illustrates how to get the file names. foreach (MultipartFileData file in provider.FileData) { Trace.WriteLine(file.Headers.ContentDisposition.FileName); Trace.WriteLine("Server file path: " + file.LocalFileName); } return Request.CreateResponse(HttpStatusCode.OK); } catch (System.Exception e) { return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); } }