我嘗試編譯我的項目之一,我的窗戶由使用Qt5.3.1 MSVC2012,用現在Qt5.4 GCC 64位與Unbuntu 7 64位14.04 LTS。Qt的 - 未定義的參考...(Ubuntu的LTS 14.04 64位)
但我有一些「未定義的引用」錯誤:
/home/innocore/Software/CES_2015/trunk/MainProgram/../bin//libSmartphoneController.a(smartphonecontroller.o): In function
SmartphoneController::init()': /home/innocore/Software/CES_2015/trunk/bin/../LibSmartphoneController/smartphonecontroller.cpp:11: undefined reference to
RemoteADBInterface::RemoteADBInterface(QString, QString, int, QObject*)' /home/innocore/Software/CES_2015/trunk/bin/../LibSmartphoneController/smartphonecontroller.cpp:13: undefined reference toRemoteADBInterface::newMessage(RemoteADBInterface::Message const&, QVariant const&)' /home/innocore/Software/CES_2015/trunk/MainProgram/../bin//libSmartphoneController.a(smartphonecontroller.o): In function
QMetaObject::Connection QObject::connect(QtPrivate::FunctionPointer::Object const*, void (RemoteADBInterface::)(RemoteADBInterface::Message const&, QVariant const&), QtPrivate::FunctionPointer::Object const, void (SmartphoneController::*)(RemoteADBInterface::Message const&, QVariant const&), Qt::ConnectionType)': /opt/5.4/gcc_64/include/QtCore/qobject.h:239: undefined reference to `RemoteADBInterface::staticMetaObject' collect2: error: ld returned 1 exit status
我的項目是由一個EXE和幾個庫像libSmartphoneController.a或libRemoteADB.a的。
所有的庫正確編譯並在正確的目錄中創建。當我編譯我的exe程序(MainProgram)時,會出現問題。 在的.pro,我相信我有正確的依賴關係:
unix:!macx {
CONFIG(release, release|debug) {
LIBS += -L$$PWD/../Lib/ -lAudioPlayer -lDisplay -lSWCom -lRemoteADB -lDMS -lTVRemote \
-lHDMIMixer -lSmartphoneController -lRemoteServer
}
CONFIG(debug, release|debug) {
LIBS += -L$$PWD/../bin/ -lAudioPlayer -lDisplay -lSWCom -lRemoteADB -lDMS -lTVRemote \
-lHDMIMixer -lSmartphoneController -lRemoteServer
} }
的LIB SmartphoneController也有兩個依賴:
在SmartphoneController.pro:
unix:!macx {
CONFIG(release, release|debug) {
LIBS += -L$$PWD/../Lib/ -lRemoteADB -lRemoteServer
}
CONFIG(debug, release|debug) {
LIBS += -L$$PWD/../bin/ -lRemoteADB -lRemoteServer
} }
的問題是它沒有找到在lib RemoteADB一些功能(構造器,信號readMessage ...)的定義。我沒有任何問題與所有其他庫+它完美編譯在windows ...
任何想法?
在此先感謝您的幫助
編輯:問題解決了感謝purplehuman。這是由於MainProgram的.pro文件中依賴項的順序所致。
unix:!macx {
CONFIG(release, release|debug) {
LIBS += -L$$PWD/../Lib/ -lAudioPlayer -lDisplay -lSWCom -lDMS -lTVRemote \
-lHDMIMixer -lSmartphoneController -lRemoteServer -lRemoteADB
}
CONFIG(debug, release|debug) {
LIBS += -L$$PWD/../bin/ -lAudioPlayer -lDisplay -lSWCom -lDMS -lTVRemote \
-lHDMIMixer -lSmartphoneController -lRemoteServer -lRemoteADB #remoteADB has to be AFTER smartphonecontroller
} }
SmartphoneController取決於RemoteADB和REMOTESERVER,並MainProgram(主程序)取決於SmartphoneController的,所以在.pro文件,你必須把這個順序的依賴關係:1)SmartphoneController 2)REMOTESERVER和RemoteADB
這是奇怪,這不是與Windows中的一個問題...
有時候順序gcc中的庫影響編譯。我不知道這是否是這個問題,但只是你知道的。 – 2015-02-06 11:42:03
有趣的是,你如何強制另一個命令?我只需要改變.pro文件中的依賴順序? – palador 2015-02-06 13:06:01
沒錯。我不確定這是否是問題,但過去我遇到過類似的問題,而改變順序解決了問題。您可能需要在依賴關係之前添加依賴庫。 – 2015-02-06 13:07:51