在Windows上混合使用Qt和Objective-C

4

我通常在OSX和iOS上开发应用程序。我发现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.cpp 和带有 test.mmtest.h。为了在 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个回答

2
链接器错误 "undefined reference to function testFunction",我怀疑是由于testFunction中缺少定义导致的。
你说得对,要将Objective-C与Qt混合使用,只需创建一个包含C函数的头文件和一个具有.m或.mm扩展名的实现文件,在其中编写Objective-C代码并在.pro文件的OBJECTIVE_SOURCES下引用该实现。
由于你正在使用Objective-C和诸如NSString之类的类,因此还需要链接到相关的框架。在这种情况下,它是Foundation。
因此,在你的配置(.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

在test函数实现中引用了NSString,因此您需要包含它的定义,只需像在Objective-C程序中一样将其添加到包含文件中即可:-
#import <Foundation/NSString.h>

谢谢,现在我会尝试这个。实际上,在test.mm中我已经包含了Foundation.h文件,我忘记提到了。 - Altair Jones
嗯...我的安装文件夹中没有c:\GNUStep...\Library\Frameworks,而且"LIBS += -framework ..."会出现"unrecognized option -framework"的错误提示,也许我漏掉了什么,或者我简化了你的建议...你能再给我一点提示吗? - Altair Jones
C:\GNUStep... 是 Windows 路径,不是 OSX! - TheDarkKnight
我已经更正了关于-framework选项的示例。 - TheDarkKnight
@Marlin069 这个问题是关于在Windows上混合使用Qt和objc的!据我所知,objc编译器是GNUStep... - Altair Jones
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接