2014-08-27 45 views
4

我通常在OSX和iOS上开发应用程序。我发现Objective-C对许多任务非常有用,并且在很多情况下可以加快工作速度。在Windows上混合使用Qt和Objective-C

我想在Windows系统上移植我的应用程序。我意识到(如果您有任何其他解决方案,请让我知道!)Qt可能是一个非常有用的工具!用Qt创建GUI非常简单快捷。问题是Qt与C++协同工作,OSX与Objective-C协同工作。

我读过Qt可以处理Objective-C的源代码,其实你可以找到OBJECTIVE_SOURCESOBJECTIVE_HEADERS的makefile变量。

我搜索了如何配置Qt Creator接受.mm文件,但我无法使其工作。

里面的.pro文件我有类似以下内容:

... 
    OBJECTIVE_SOURCES += \ 
     test.mm 
    INCLUDEPATH += "C:\GNUStep\...\Headers" 
    LIBS += -L"C:\GNUStep\...\Libraries" -lobjc -lgnustep-base 
    QMAKE_CXXFLAGS += -fconstant-string-class=NSConstantString -std=c99 
    ... 

我非常简单的项目是一个小部件(.h.cpp),该main.cpptest.htest.mm。为了混合C++和Objective-C,我想到了一个“桥”(就像我在Cocoa中混合Objective-C和C++时那样),所以我创建了test.h作为一个简单的头文件(没有Objective-C,只有一个桥) :

// test.h 
    void testFunction(void); 

比:

// test.mm 
    #import <Foundation/Foundation.h> 

    void testFunction(void) { 
     NSString* string; 

     string = @"This is a test string"; 
     NSLog(@"%@", string); 
    } 

最后:

// main.cpp 
    ... 
    #include "test.h" 

    ... 
    testFunction(); 
    ... 

链接器给我的经典 “未定义的参考作用testFunction”。像它这样的东西不能链接从.mm文件创建的.o目标文件。

你们中的任何人都可以告诉我,如果这个过程出了什么问题或者指向我有关如何配置Qt来接受Objective-C语言的教程?还有另一个我真正喜欢的解决方案,它是纯粹的Objective-C,即使用GNUStep Gorm接口生成器,但不幸的是,使用Gorm构建的GUI完全无法通过诸如Jaws或NVDA等可访问工具访问,而且我需要为视障人士创建一些应用程序!

非常感谢您

回答

1

链接器错误“未定义的参考作用testFunction”,我怀疑是由于缺乏什么东西在testFunction被定义。

你说的很对,要将Objective-c和Qt混合在一起,你只需创建一个带有C函数的头文件和一个扩展名为.m或.mm的实现文件,然后在其中编写Objective-C代码并引用实现在.pro下的OBJECTIVE_SOURCES

当您使用objective-c和诸如NSString等类时,您还需要链接到相关框架。在这种情况下,它是基础。

所以,在你的配置(。PRO)文件: -

LIBS += -framework Foundation 

如果要添加其他,如了AppKit,它会接着是: -

LIBS += -framework Foundation 
LIBS += -framework AppKit 

唯一的其他除了我的.pro文件时,我混合语言是这样的: -

QMAKE_CXXFLAGS += -F/Library/Frameworks 
QMAKE_CFLAGS += -F/Library/Frameworks 
QMAKE_LFLAGS += -F/Library/Frameworks 

当您在测试功能的实现参考的NSString,你需要包括它的定义,所以只是将它加入到包括,因为你通常会在一个Objective-C程序做的: -

#import <Foundation/NSString.h> 
+0

谢谢,现在我会试试这个。真的,我在test.mm中包含了Foundation.h,我忘了提及。 – 2014-08-27 08:31:02

+0

呃......我的安装文件夹中没有c:\ GNUStep \ ... \ Library \ Frameworks,而“LIBS + = -framework ...”给出了“无法识别的选项 - 框架”,也许我错过了一些东西,或者我简化了你的建议......你能否给我另一个提示? – 2014-08-27 08:48:32

+0

C:\ GNUStep ...是一个Windows路径,不是OSX! – TheDarkKnight 2014-08-27 08:50:21