URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5468
[ Назад ]

Исходное сообщение
"сборка dll в mingw"

Отправлено Serega_S , 31-Май-06 18:26 
Есть проект под линуксом.
Кратко:
Ядро программы (чата) загружает модуль, модуль экспортирует функции, запускаемые ядром. Ядро тоже экспортирует набор функций, которые может запускать модуль. В линуксе всё линкуется и запускается и работает.
Под mingw упорно не хочет линковаться модуль, ругаясь на функцию, которая будет вызываться из ядра.

Пробовал указывать все опции, которые указывал при сборке в линуксе, хотя там одна опция: -shared и всё собирается и работает.

Вопрос: как заставить это дело собраться под mingw?


Содержание

Сообщения в этом обсуждении
"сборка dll в mingw"
Отправлено DeadMustdie , 31-Май-06 20:41 
Виндозная модель линковки такого не позволяет, насколько я помню.

"сборка dll в mingw"
Отправлено Serega_S , 01-Июн-06 04:21 
>Виндозная модель линковки такого не позволяет, насколько я помню.

В mingw или вообще?

P.S.: просто ужасно... Проэкт завязан на эту фичу. Как примитивно в винде! Как теперь это обруливать даже и не знаю...


"сборка dll в mingw"
Отправлено DeadMustdie , 01-Июн-06 09:15 
>>Виндозная модель линковки такого не позволяет, насколько я помню.
>
>В mingw или вообще?

Вообще.

>P.S.: просто ужасно... Проэкт завязан на эту фичу. Как примитивно в винде!
>Как теперь это обруливать даже и не знаю...

LoadLibrary() + GetProcAddress() - аналог dlopen() + dlsym()


"сборка dll в mingw"
Отправлено Serega_S , 01-Июн-06 11:34 
>>>Виндозная модель линковки такого не позволяет, насколько я помню.
>>
>>В mingw или вообще?
>
>Вообще.
>
>>P.S.: просто ужасно... Проэкт завязан на эту фичу. Как примитивно в винде!
>>Как теперь это обруливать даже и не знаю...
>
>LoadLibrary() + GetProcAddress() - аналог dlopen() + dlsym()

В моём случае код функции находится в главной программе, которая загружет эту либу. Т.е. получается загружать некого, т.к. код уже загружен. Или загружать код бинарника?

Проблема даже на этапе компиляции - просто не собирается.

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

Но конечно же интересно иметь набор решений.