2014-08-27 48 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