| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [wx] не находит wxIAEvent::GetClassInfo() |
| Автор: JavaCraft 19.11.2008, 22:06 |
| Решил добавить к своему приложению еще одну либу (WXIA). Используется wxUSE_UNICODE. 1) Скомпилировать предлагаемую либу из MSYS, как есть, не вышло. Создал для нее проект в CodeBlocks, все опции практически идентичны основному проекту, за исключением цели (Static Lib). Добавил исходники, настроил пути, подрихтовал код, т.к. он старый и там были ошибки. Скомпилировал статическую либу без ошибок. Если нужно, могу подробности показать. 2) Добавил в основной проект зависимость, прописал include, добавил либу в список загружаемых либ, добавил нужный код задействующий классы из либы, запустил компиляцию. В приложении ошибок и значимых варнингов также не обнаружено. При линковке выдает одну ошибку ..\wxia\lib\libwxia.a(ia.o):ia.cpp:(.rdata$_ZTV9wxIAEvent[vtable for wxIAEvent]+0x8)||undefined reference to `wxIAEvent::GetClassInfo() const'| Пересоздавал проект либы по разному(как WX-проект, как Static Lib через визард), результат одинаковый. Погуглил, поприменял советы, но так ничего и не получилось. В чем засада? |
| Автор: t_rex 21.11.2008, 01:36 |
| Ммм.. на вид похоже что у тебя библы не в той последовательности идут. Попробуй wxIA поставить в начале списка. Ммм.. также думаю стоит посмотреть на сорцы wxIAEvent и проверить все ли директивы компилятора, необходимые для включения этого класса, указаны в настройках коомпилятора |
| Автор: JavaCraft 21.11.2008, 16:55 | ||||||
У меня эта библа вначале списка. А в какой последовательности правильно?
Еще не понятна реакция линкера на опции Prepend и Append target options to project options. Когда было везде Append, но для Linker Settings - Prepend, то выдавалась только одна вышеуказанная ошибка. Когда я сделал и для линкера Append, то стало намного больше ошибок. Вроде всё правильно, опции цели должны идти после общих опций проекта.
Если переместить libwxia.a в середину т.е. поставить перед libwxpng то первонаяальная ошибка пропадает, но все остальные остаются А если вернуть Prepend, то появляется первоначальная, но пропадают все остальные. Шаманство какое-то. Как (автоматически)определить правильный порядок опций и линковки? Я затрудняюсь анализировать зависимости. |
| Автор: t_rex 21.11.2008, 17:26 | ||
Это из libadvapi32.a У тебя точно все нужные виндовые либы добавлены? Я думаю надо посмотреть на что ругается и найти в MSDN в каких библиотеках эти ненайденные функции и дописать эти библиотеки в список в конец |
| Автор: JavaCraft 23.11.2008, 00:59 | ||||||
Либы были добавлены автоматически. Эта либа присутствует.
В предыдущем посте я написал, что если изменить политику линковки, то эти ошибки пропадают, другие появляются и наоборот, т.е. проблем с либами нет, но есть проблемы с их линковкой. Возможно, тонкости применения Append|Prepend опций это особенность GNU GCC, а там всё не так явно, как кажется. Пока не разобрался.
Ничего необычного в этом классе нет. Это потомок wxEvent. Какие ему специальные настройки нужны?
Кстати, может это и не относится к делу, но из всех компонентов упоминаемых в ошибках, связанных с libwxmsw29u_core.a, в моем проекте используются только app и textctrl, остальных нет нигде в папке проекта, ни в исходниках, ни в xml, ни в других файлах. |
| Автор: JavaCraft 24.11.2008, 17:33 |
| Народ! Какие еще варианты есть? Ато у меня только один остался - не использовать никакие компоненты кроме включенных в релиз и установить непонятный режим Prepend. Тогда работает. Еще бубен присматриваю. |
| Автор: t_rex 24.11.2008, 18:38 |
| Слей проект на t-rex (бжж) wxwidgets.info Попробую глянуть |