5

我又遇到了另一个问题。这一次,我有一个 .dll,一个包含 .qrc(QT 资源)文件的共享库,问题是,当我尝试访问该库的某个资源时,它不起作用。我尝试实施:

Q_INIT_RESOURCE(resourcefilename)

它仍然无法正常工作。(它说没有找到“qInitResources_resourcefilename()”。)

4

2 回答 2

4

没关系。我找到了解决方案。未找到 qInitResources_name()。所以,我在共享库中创建了一个函数

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

然后,在主应用程序上,我调用了该函数,耶!有效。

于 2012-08-25T00:44:19.943 回答
2

我将假设您使用的是 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

于 2014-07-29T12:21:53.053 回答