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