我再次遇到另一個問題。這一次,我有一個.dll,一個包含.qrc(QT資源)文件的共享庫,問題是,當我試圖訪問庫的某個資源時,它不起作用。 我試着實施:共享庫QT資源
Q_INIT_RESOURCE(resourcefilename)
它仍然無法正常工作。 (它說沒有找到「qInitResources_resourcefilename()」。)
我再次遇到另一個問題。這一次,我有一個.dll,一個包含.qrc(QT資源)文件的共享庫,問題是,當我試圖訪問庫的某個資源時,它不起作用。 我試着實施:共享庫QT資源
Q_INIT_RESOURCE(resourcefilename)
它仍然無法正常工作。 (它說沒有找到「qInitResources_resourcefilename()」。)
沒關係。我找到了解決方案。 未找到qInitResources_name()。所以,我在共享庫裏面創建了一個函數
int RmiLib::startResources(){
extern int qInitResources_rmi();
return qInitResources_rmi();
}
然後,在主應用程序中,我調用了該函數,並且yay!有效。
我會假設你使用的是Windows,因爲你說你有一個.dll
我只是碰到了這個函數qInitResources_resourcefilename無法找到同樣的問題。如果你的庫有一個.qrc文件(檢查mapfile),這個函數確實存在於共享庫中。問題是這個函數沒有被導出,所以鏈接器在鏈接主App時沒有找到它。我將函數qInitResources_resourcefilename添加到共享庫的導出表中,如下所示。
添加新的文件共享庫 export.def
LIBRARY
EXPORTS
qInitResources_resourcefilename
以下內容添加到您的共享庫.pro文件
QMAKE_LFLAGS += /DEF:\"$${PWD}\\export.def\"
OTHER_FILES += \
export.def
您的解決方案解決了這個問題,因爲RmiLib :: startResources包含在導出表中。
我使用的是Windows 7,MSVC 2010,Qt 5.2.0
謝謝!這有助於! – alanwsx