Проверка RTTI не удалась на удаленной машине с Linux

Я использую C ++ / Qt для своего проекта, и я столкнулся с этой странной проблемой.

Мое приложение отлично работает на любом компьютере с Linux и Windows. Проблема возникает, когда я использую удаленный компьютер с Linux для выполнения своей программы и использую сервер X Windows (я использую Xming) для просмотра / использования. Отладчик указывает на строку, где dynamic_cast не может получить указатель на объект (преобразование возвращает хороший NULL) вместо реального объекта, который я хотел.

Я подозреваю некоторую проблему конфигурации, которую я должен пропустить, чтобы включить эти проверки во время выполнения.

Любой, кто сталкивался с такими проблемами, приветствовал бы любые указатели к решению.

1

Решение

Как вы связаны? У нас была похожая проблема с нашей Java
плагинов. Если dynamic_cast находится в другой DLL, чем
DLL, где был построен объект, RTLD_GLOBAL должен быть установлен
в призыве к dlopen когда библиотеки DLL загружены. Если библиотеки DLL
загружаются неявно, будет ли он установлен, будет зависеть от того, как
был установлен для DLL, запускающей загрузку (что означает, что вы
может не иметь никакого контроля над этим). В конце концов, мы должны были убедиться, что
нет .so были загружены неявно (имея Java загрузить специальный
DLL загрузчика, который загрузил все явно, в
порядок зависимости).

Обратите внимание, что это не может быть вашей проблемой; Я просто догадываюсь, так как
У меня недостаточно информации. Но у нас было точно так же
симптомы.

0

Другие решения

Хорошо, после многих испытаний это было решением.

Мне нужно было экспортировать классы интерфейса явно, используя
атрибут((Видимость ( «по умолчанию»)))
И чтобы убедиться, что в vtable есть запись, определите и очистите виртуальный деструктор для этого.

Кажется, на некоторых машинах Linux, если я не экспортирую, он не распознает RTTI и возвращает NULL.

0

По вопросам рекламы [email protected]