OberonCore
https://forum.oberoncore.ru/

Создание so/dll/lib/a
https://forum.oberoncore.ru/viewtopic.php?f=1&t=2401
Страница 1 из 1

Автор:  Alexey Veselovsky [ Воскресенье, 28 Февраль, 2010 17:28 ]
Заголовок сообщения:  Создание so/dll/lib/a

Предысторию см. тут: viewtopic.php?f=27&t=2400

Вопрос -- можно ли сделать из модуля/множества модулей, нормальную so/dll/lib/a библиотеку, которую можно было бы использовать из какого-нибудь С++? Причем, желательно, чтобы отличий от какой-нибудь сишной библиотеки было минимум.

Компилятор какого-нибудь C++ -- скорее всего gcc, если это важно. Платформа -- windows, linux.

Автор:  Илья Ермаков [ Воскресенье, 28 Февраль, 2010 19:53 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Конечно, можно.

Смотрите документацию Блэкбокса, раздел "Платформенно-зависимые особенности" и документацию модуля DevLinker (правой кнопкой по имени модуля - и Documentation).

so - тоже без проблем, в пакете от финнов и далее у Димыча в сборке есть DevElfLinker.

Автор:  Alexey Veselovsky [ Воскресенье, 28 Февраль, 2010 20:01 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Вопрос -- а что там будет с именами функций? Т.е. ведь имя функции в CP имеет вид Модуль.Функция. Т.е. должен быть какой-то манглинг.

Автор:  AVC [ Воскресенье, 28 Февраль, 2010 20:52 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Alexey Veselovsky писал(а):
Вопрос -- а что там будет с именами функций? Т.е. ведь имя функции в CP имеет вид Модуль.Функция. Т.е. должен быть какой-то манглинг.

Пример из документации ББ ("Platform-Specific Issues (Windows)").
Код:
MODULE MyInterface ["MyDll"];
   PROCEDURE Proc1*;            (* Proc1 èç MyDll *)
   PROCEDURE Proc2* ["BlaBla"];            (* BlaBla èç MyDll *)
   PROCEDURE Proc3* ["OtherDll", ""];            (* Proc3 èç OtherDll *)
   PROCEDURE Proc4* ["OtherDll", "DoIt"];            (* DoIt èç OtherDll *)
END MyInterface.

Автор:  Alexey Veselovsky [ Воскресенье, 28 Февраль, 2010 21:12 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Спасибо.

Автор:  Иван Горячев [ Понедельник, 01 Март, 2010 01:07 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

AVC писал(а):
Пример из документации ББ ("Platform-Specific Issues (Windows)").

Это импорт dll в Блэкбокс. Для экспорта нужно смотреть документацию DevLinker. Там сказано:
Цитата:
<destFile> := {<module> {option}} {idNumber <resourceFile>}.
...
option is one of the following characters:
...
# interface module: the exported procedures of this module are added to the export list.

Т.е. процедуры экспортируются без имён модулей. Правда не ясно что будет в случае совпадения имён.

Автор:  AVC [ Понедельник, 01 Март, 2010 01:18 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Иван Горячев писал(а):
# interface module: the exported procedures of this module are added to the export list.

Да, верно. Для экспорта необходим символ # после имени модуля.

Автор:  Роман М. [ Вторник, 02 Март, 2010 01:37 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Если в TestExport1 и TestExport2 находятся описания переменных и процедур для экспорта, то так:
Win32
DevLinker.LinkDll libexport.dll := TestCore TestExport1# TestExport2# ~

Linux
DevElfLinker.LinkDll libexport.so := TestCore TestExport1# TestExport2# ~

ElfLinker нужно устанавливать отдельно.

Автор:  Oleg N. Cher [ Пятница, 17 Июль, 2015 15:38 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

По теме также см. мою статью «BlackBox Component Builder: линковка и Linux». Линкуем независимое приложение для Windows и Linux на примере игры Samurai (Дениса Колодько), написанной на Компонентном Паскале (BlackBox).

Вложения:
LinkLinux.zip [148.42 КБ]
Скачиваний: 148

Автор:  prospero78 [ Среда, 12 Август, 2015 18:51 ]
Заголовок сообщения:  Re: Создание so/dll/lib/a

Буквально вчера компилял для окошек:
DevLiner.LinkDLL
Работает на ура)

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/