LINUX.ORG.RU

[g++][dlsym]получение адресов функций из *.so

 


0

0

В общем такая трабла. Написал хедер, где функции объявлены по виду:

void ( APIENTRY *zgl_Init )( byte FSAA, byte StencilBits );

Библиотека загружается обычным способом через dlopen, и дальше идет получение адресов на функции. Получаю следующим образом:

zgl_Init = dlsym( zglLib, "zgl_Init" );

В сишном компиляторе все собирается и проблем не возникает. Стоит скомпилировать с помощью g++, так сразу вываливается ошибка

ошибка: некорректное преобразование из ‘void*’ в ‘void (*)(byte, byte)‘

Для быдло-компилятора от MS(из-за коего пришлось делать дин-загрузку) решение сводилось к заключению всего хедера в extern "C" {...}. Тут же сей номер не прокатывает... Также почему-то были матюги в сторону области видимости для функций dlopen/dlsym, но проблема решилась подключением dlfcn.h. Осталось вот только трабла выше... у кого-нить есть какие-либо соображения по этому поводу?

★★★★

> у кого-нить есть какие-либо соображения по этому поводу?

Да, блин, прочитать внимательно сообщение об ошибке! И какой-нить учебник по C++ тоже не помешал бы.

zgl_Init = (void (*)(byte, byte))dlsym(zglLib, "zgl_Init");

Чисто из эстетических соображений я бы сделал typedef void (*zgl_v_bb_t)(byte, byte), или заюзал бы typeof если это возможно.

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

>>Да, блин, прочитать внимательно сообщение об ошибке! И какой-нить учебник по C++ тоже не помешал бы.

О чем ошибка я вкурсе. И том что можно обьявить доп. типы тоже, но мля - это ж ипанутся можно сколько нужно будет объявить новых типов для хедера, где содержится сотня функций о_О Просто все пашет и без этого извращения в обычном Си, да и функции - это просто указатели по сути, а не типы... вот и интересно можно ли обойтись малой кровью. Так бы я сюда и не обращался.

Andru ★★★★
() автор топика

Может посмотреть на typeof, и что-нибудь с помощью шаблона/макроса сочинить?

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

таки пришлось сочинять макрос с typeof. Лан, всем спасиб )

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