LINUX.ORG.RU

Qt plugins + application


0

1

Приложение на Qt расширяется динамически подгружаемыми pluginами, последние могут вызывать функции приложения (вызывать методы классов реализованные внутри приложения) или нет?

Ответ на: комментарий от erfea

На лицо глубокие знания c++: человек «пишет на qt».

anonymous
()
Ответ на: комментарий от erfea

Что-то меня заклинил вопрос о том как оно связи на момент компиляции библиотеки на внешнюю программу разрешит если о ней нихрена не знает? Что будет если я эту либу подгружу к приложению где вызываемые ей функции не реализованы?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Что-то меня заклинил вопрос о том как оно связи на момент компиляции библиотеки на внешнюю программу разрешит если о ней нихрена не знает?

Подключай заголовки и линкуй...

Что будет если я эту либу подгружу к приложению где вызываемые ей функции не реализованы?

ЕМНИП сегфолт ещё на стадии загрузки либы... но зачем это делать вообще?

erfea ★★★★★
()
Ответ на: комментарий от erfea

Второе чисто любопытно, а вот первое я так понимаю мне не сильно подходит если я хочу собирать либу отдельно от приложения, или одних заголовков будет достаточно?

mskmsk1985
() автор топика

Посмотри на кутим, там все как раз на плагинах сделано

Gorthauer ★★★★★
()
Ответ на: комментарий от Thero

Thero приложение на кьют может больше чем приложение на си++...

поясни что ты имел ввиду? хотя я соглашусь, по части экспорта классов у Qt больше возможностей и метаинформация в этом сильно помогает, наверное это

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

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

Gorthauer ★★★★★
()
Ответ на: комментарий от erfea

ЕМНИП сегфолт ещё на стадии загрузки либы... но зачем это делать вообще?

Не будет сегфолта, просто ругнётся в stderr, что нужные символы не может найти, и не загрузит плагин.

gentoo_root ★★★★★
()
Ответ на: комментарий от mskmsk1985

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

Вы на столько далеко от программирования.... в общем хватит заголовков.

erfea ★★★★★
()
Ответ на: комментарий от erfea

А вот интересно как это Вы себе представляете? Что сеи должно работать: заголовок app.h

...
class A
{
public:
   A();

   void routine();
};
...
Попробуйте собрать либу в которую включен (gcc -shared ...) такой заголовок вам компилятор все расскажет о том как он не может найти символы для конструктора и routine() если их использовать в библиотеке. Сами-то что посерьезнее привет мир писали?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

А вот интересно как это Вы себе представляете? Что сеи должно работать: заголовок app.h

как обычно

Попробуйте собрать либу в которую включен (gcc -shared ...) такой заголовок вам компилятор все расскажет о том как он не может найти символы для конструктора и routine() если их использовать в библиотеке.

Вы, товарищ, видимо не вкурсе что включая заголовок, нужно ещё и линковщику сообщить с чем линковаться... Вот при таком раскладе начинается ругань на неопределённые (undefined) объекты. Собственно неопределёнными они и будут являться, в заголовках то можно только объявлять (declared).

Сами-то что посерьезнее привет мир писали?

ВНЕЗАПНО! Да, это источник моего хлеба.

erfea ★★★★★
()
Ответ на: комментарий от erfea

Я простите говорил что плагин расширяет приложение, собирается отдельно от него. Помоему, очевидно (если нет то приведите примеры), что плагин не должен линковаться с самим приложением, отсюда и вопросы. И уж раз на то пошло, то расскажите уж тогда как сликновать либу с приложением чьи фичи она использует? gcc -shared ... -l<чего сюды писать?> или что линкер руками вызывать предполагается?

mskmsk1985
() автор топика
Ответ на: комментарий от mskmsk1985

Я простите говорил что плагин расширяет приложение, собирается отдельно от него. Помоему, очевидно (если нет то приведите примеры), что плагин не должен линковаться с самим приложением, отсюда и вопросы.

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

И уж раз на то пошло, то расскажите уж тогда как сликновать либу с приложением чьи фичи она использует? gcc -shared ... -l<чего сюды писать?> или что линкер руками вызывать предполагается?

ЕМНИП, вы не сообщали какой системой сборки пользуетесь. Qmake, cmake или ещё что...

erfea ★★★★★
()

А вообще если реально хочешь победить, расскажи что за приложение для которого нужно плагин писать. Какие именно ресурсы приложения тебе нужно юзать. Какой системой сборки пользуешься. Ну и так для справочки, обычно общие ресурсы выносятся в разделяемую библиотеку...

erfea ★★★★★
()

У приложения и плагинов должна быть общая либа, к которой они все линкуются.

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.