Неопределенный символ Qt Designer с плагином Custom Widget - PullRequest
2 голосов
/ 04 октября 2011

Я использую Qt 4.7.2 в Fedora 14.

У меня есть рабочая библиотека пользовательских виджетов, которую я пытаюсь интегрировать в 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 плагина, и затем он заработал.

Что меня удивляет, как я могу создать плагин без ошибок без библиотеки?И почему мой простой виджет работал без библиотеки?

1 Ответ

1 голос
/ 04 октября 2011

Сообщение об ошибке выглядит так, как будто компоновщик не нашел определения для конструктора myWidget(QString, my_struct*, QWidget*).Вы добавили соответствующий исходный файл в вашу сборку релиза?У вас действительно есть определение для этого конструктора?Также возможно, что вам придется поменять порядок связывания объектных файлов.Я видел это с более крупными проектами в прошлом, поэтому я не был бы слишком удивлен.Объектный файл, содержащий определение, должен быть указан перед тем, который использует определение.

...