линковка dll в mingw (в windows)
От: Stepan_24  
Дата: 01.06.06 03:02
Оценка:
--
В линуксе есть возможность как экспортировать функции из so (dll), которые будет потом использовать главный бинарник программы, так и наоборот — главный бинарник программы может экспортировать функции, которые потом будет использовать динамическая библиотека после загрузки её главной программой. Т.е. главный бинарник может предоставлять функции и внутренние свои структуры данных в доступ из динамической библиотеки (в данном случае плагину).
В ниже-приведённом примере get_param() экспортируется главной программой и она доступна для библиотеки, проблема в том, чтобы собрать эту библиотеку так, чтобы она понимала, что эта функция позже будет найдена в главной программе.

Есть следующий код:
под ликуксом прекрасно компилится, линкуется.
Под виндой в mingw компилируется, но линковаться отказывается, мотивируя отсутсвием библиотеки с функцией get_param

Компилятор и линковшик в обоих случаях один и тотже — MinGW

extern "C" int module_generate_krnl(char*pam,int size); // запуск функции-обработчика модуля
extern "C" char* get_param(char*pam, char*buf, int size);


int module_generate_krnl(char*pam,int size_pam)
{
char*tt;
tt=get_param(tt,tt,100);
return 0;
}

Правило сборки:
main: init.o
gcc -shared --dll init.o -o mkc_test.dll
init.o:
gcc -c -fPIC init.cpp -o init.o

Вопрос: есть ли в винде данная возможность и если нет, то можно ли как-то обойти это ограничение?
Re: линковка dll в mingw (в windows)
От: Tonal- Россия www.promsoft.ru
Дата: 01.06.06 03:54
Оценка: 7 (1)
Делаем так:

    1) Все экспортируемые функции обявить с __declspec(dllexport) (в exe-шнике)
    2) Использовать с __declspec(dllimport) (в dll-ке)
    3) Сгенерить для exe-шника библиотеку импорта (ld --out-implib <file>)
    4) Мспользрвать эту библиотеку при сборки dll-ки.

Да, для последних линкеров можно протустить 3-ий шаг, а на 4-ом подсунуть в качестве библиотеки сам exe-шник.
Re[2]: линковка dll в mingw (в windows)
От: Stepan_24  
Дата: 01.06.06 04:48
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Делаем так:


T>

    T>1) Все экспортируемые функции обявить с __declspec(dllexport) (в exe-шнике)
    T>2) Использовать с __declspec(dllimport) (в dll-ке)
    T>3) Сгенерить для exe-шника библиотеку импорта (ld --out-implib <file>)
    T>4) Мспользрвать эту библиотеку при сборки dll-ки.
    T>

T>Да, для последних линкеров можно протустить 3-ий шаг, а на 4-ом подсунуть в качестве библиотеки сам exe-шник.


Спасибо огромное за помощь!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.