2012-08-25 147 views
3

我再次遇到另一個問題。這一次,我有一個.dll,一個包含.qrc(QT資源)文件的共享庫,問題是,當我試圖訪問庫的某個資源時,它不起作用。 我試着實施:共享庫QT資源

Q_INIT_RESOURCE(resourcefilename) 

它仍然無法正常工作。 (它說沒有找到「qInitResources_resourcefilename()」。)

回答

4

沒關係。我找到了解決方案。 未找到qInitResources_name()。所以,我在共享庫裏面創建了一個函數

int RmiLib::startResources(){ 
    extern int qInitResources_rmi(); 
    return qInitResources_rmi(); 
} 

然後,在主應用程序中,我調用了該函數,並且yay!有效。

1

我會假設你使用的是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

+0

謝謝!這有助於! – alanwsx