Есть проект под линуксом.
Кратко:
Ядро программы (чата) загружает модуль, модуль экспортирует функции, запускаемые ядром. Ядро тоже экспортирует набор функций, которые может запускать модуль. В линуксе всё линкуется и запускается и работает.
Под mingw упорно не хочет линковаться модуль, ругаясь на функцию, которая будет вызываться из ядра.Пробовал указывать все опции, которые указывал при сборке в линуксе, хотя там одна опция: -shared и всё собирается и работает.
Вопрос: как заставить это дело собраться под mingw?
Виндозная модель линковки такого не позволяет, насколько я помню.
>Виндозная модель линковки такого не позволяет, насколько я помню.В mingw или вообще?
P.S.: просто ужасно... Проэкт завязан на эту фичу. Как примитивно в винде! Как теперь это обруливать даже и не знаю...
>>Виндозная модель линковки такого не позволяет, насколько я помню.
>
>В mingw или вообще?Вообще.
>P.S.: просто ужасно... Проэкт завязан на эту фичу. Как примитивно в винде!
>Как теперь это обруливать даже и не знаю...LoadLibrary() + GetProcAddress() - аналог dlopen() + dlsym()
>>>Виндозная модель линковки такого не позволяет, насколько я помню.
>>
>>В 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-шник.Но конечно же интересно иметь набор решений.