我又有了另一个问题。这次,我有一个.dll,一个包含.qrc(QT资源)文件的共享库,问题是,当我试图访问该库的一个资源时,它不起作用。 我尝试实现:
Q_INIT_RESOURCE(resourcefilename)
它仍然无法正常工作。 (它表示找不到“qInitResources_resourcefilename()”。)
答案 0 :(得分:4)
没关系。我找到了解决方案。 找不到qInitResources_name()。所以,我在共享库中创建了一个函数
int RmiLib::startResources(){
extern int qInitResources_rmi();
return qInitResources_rmi();
}
然后,在主应用程序上,我调用了该函数,并且是!它奏效了。
答案 1 :(得分:1)
我将假设你使用的是Windows,因为你说你有.dll
我遇到了同样的问题,即无法找到函数qInitResources_resourcefilename。如果您的库具有.qrc文件(检查mapfile),则此功能确实存在于共享库中。问题是此函数未导出,因此链接器在链接主应用程序时找不到它。我将函数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