2

我在 Fedora 14 下使用 Qt 4.7.2。

我有一个自定义小部件的工作库,我正在尝试将其集成到 Qt Designer 中。有一个简单的小部件基类,然后是一些更复杂的小部件继承自它。简单的小部件集成得很好,但我对更复杂的小部件有问题。

问题来自这样一个事实,即更复杂的结构需要在创建时传递给它们的特殊结构。所以我在插件中创建复杂小部件的代码是:

QWidget *myPlugin::createWidget(QWidget *parent)
{
    my_struct *xyz = new my_struct;
    return new myWidget("MyWidget",xyz, parent);
}

my_struct 只是一个简单的 C 风格结构,包含整数、双精度和数组。

然后,当我使用这个插件启动 Qt Designer 时,我得到:

/usr/lib64/qt4/bin/designer: symbol lookup error: /usr/lib64/qt4/plugins/designer/libMyPlugin.so: undefined symbol: _ZN8MyWidgetC1E7QStringP17my_structP7QWidget

我正在构建插件的发布版本,而不是调试版本。

我还尝试将 xyz 定义为插件中的静态类变量,并将其地址传递给构造函数,但我仍然得到相同的错误。

我还尝试将 xyx 作为未使用的静态类变量添加到我的简单小部件中,并且没有给出错误,因此错误似乎来自对 myWidget 构造函数的调用。

谁能帮我解决这个问题?


谢谢阿恩,

你是对的。

我将我的库显式添加到插件的 .pro 文件中,然后它就可以工作了。

令我困惑的是,如果没有库,我如何构建没有错误的插件?为什么我的简单小部件在没有库的情况下也能工作?

4

1 回答 1

1

错误消息看起来好像链接器没有找到构造函数的定义myWidget(QString, my_struct*, QWidget*)。您是否将相关的源文件添加到您的发布版本中?你真的有这个构造函数的定义吗?您也可能必须交换目标文件链接顺序。我过去曾在大型项目中看到过这一点,所以我不会太惊讶。包含定义的目标文件需要在使用定义的文件之前说明。

于 2011-10-04T07:45:06.580 回答