2013-07-17 33 views
3

首先,我知道還有其他人在討論這個錯誤,但我認爲它有點不同。在架構x86_64中未找到Qt5「符號」

我有一個Qt項目,這有利於文件:

QT  += core 
QT  += network 
QT  -= gui 

TARGET = QDownloaderCLI 

CONFIG += console 
CONFIG -= app_bundle 


TEMPLATE ... 

我試着用CONFIG -= X86_64但沒有任何變化。

搜索網上無意間發現一些奇怪的事情,我已經有了一個公共槽.h文件與他的.cpp文件執行:

public slots: 
    void stateChanged(int state); 

有了這個,我已經得到了錯誤信息但如果我在.h和.cpp中註釋void stateChanged(int state);,它就可以工作。

我該如何解決這個問題?

我也有警告:

directory not found for option '-F/Applications/Qt//5.1.0/clang_64/qtbase/lib' 

"This version of OS X is unsupported" [-W#warnings] 

我也試過 「運行QMAKE」 但我得警告過:

No .qmake.cache is present. This significantly slows down qmake with this makespec. 
Call 'cache()' in the top-level project file to rectify this problem. 

我在帶Qt 5.1.0的Mac OS X 10.8.4

我的.h文件的代碼:

#ifndef DOWNLOADER_H 
#define DOWNLOADER_H 

#include <QObject> 
#include <QDebug> 
#include <QFile> 
// In Qt 5 no more QHttp 
#include <QNetworkAccessManager> 

class downloader : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit downloader(QObject *parent = 0); 
    void doDownload(); 

signals: 

public slots: 
    void stateChanged(int state); 

private: 
    QNetworkAccessManager *http; 

}; 

#endif // DOWNLOADER_H 
+0

您是否在stateChanged函數中使用任何第三方庫? –

+0

這個問題似乎是脫離主題,因爲它是關於簡單的語法錯誤 –

+0

@AndrewBarber問題不在於語法錯誤。爲OS X上的Qt項目獲取鏈接/編譯標記是正確的。這是我在搜索這個特定錯誤時發現的第一個結果,我嘗試在OS X上構建我的複雜Qt項目。 –

回答

2

您需要提供你的編譯輸出,這樣我們可以幫你找細節,現在你只給了我們從問題中輸出的警告。

當OSX上有一個參考錯誤時,我通常會得到這個錯誤。 即時通訊當我已經在我的.h文件中聲明瞭一個函數,然後還沒有聲明它。

您是否測試了將stateChanged函數公開而不是插槽?

當您試圖通過右鍵單擊.cpp文件中的函數並在光標下選擇跟隨符號時,會發生什麼情況。

如果.cpp和.h文件之間的連接錯誤,那麼您將在該處發生錯誤。 您還可以嘗試在.h文件中聲明該函數以對其進行測試。

你得到的警告是你總是得到的警告,它不應該使應用程序無法運行。我每次運行應用程序時都會得到它。

請提供編譯輸出。

Regards/RK

+0

當我宣佈它爲public而不是public slot時,它會進行編譯。我得到的唯一錯誤信息是avertissement:找不到選項'-F/Applications/Qt // 5.1.0/clang_64/qtbase/lib'的目錄。然後右鍵單擊.cpp中的函數不做任何事情。 – avignat

+0

你編譯的輸出應該看起來像這樣'09:15:54:Starting:「C:\ Qt \ 5.0.2 \ Tools \ MinGW \ bin \ mingw32-make.exe」 C:/Qt/5.0.2/ Tools/MinGW/bin/mingw32-make -f Makefile.Debug \ 5.0.2 \ 5.0.2 \ mingw47_32 \ include \ QtWidgets「-I」C:\ Qt \ 5.0.2 \ 5.0.2 \ mingw47',你有沒有嘗試創建一個類似的功能,並將其用作公共插槽? –

+0

公共插槽(錯誤)在這裏是輸出:http://pastebin.com/WQBUghJK – avignat

0

是不是正確的路徑?在我Makefile,我有:

LIBS   = $(SUBLIBS) -F/Users/enrico/Qt5.0.1/5.0.1/clang_64/lib -framework QtWidgets -F/Users/enrico/Qt5.0.1/5.0.1/clang_64/qtbase/lib -framework QtGui -framework QtCore -framework OpenGL -framework AGL 

什麼爲void stateChanged(int state);錯誤信息?

+0

對於'void stateChanged(int state);'這裏是錯誤消息:'Warning:directory not found選項'-F /應用程序/ Qt // 5.1.0/clang_64/qtbase/lib'找不到架構x86_64的錯誤符號 – avignat

+0

沒有其他連接器輸出?請發佈你在'Compile Output'中的內容。你有沒有試過CONFIG + = x86_64' 'CONFIG - = i386'? – asclepix

+0

我已經發布編譯輸出在我的第一個評論和配置+ = x86_64與CONFIG - = i386沒有改變任何東西 – avignat

0

在鏈接階段之前,您的.h文件應該被編譯爲* .moc。如果你沒有找到符號是stateChanged這是你的缺失步驟。當進入鏈接階段時,沒有找到QObject插槽作爲符號,鏈接器停止處理。

或者它可能缺少一些QT keyworks /宏被正確聲明爲QObject。

採取Qt5 help for moc

相關問題