![]() |
|
![]() ![]() ![]() |
|
S1oven |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.9.2009 Репутация: нет Всего: нет |
Подскажите плиз, как собрать фортрановскую DLL (нужно для подключения к .NET сборке)
На руках есть: TU.FOR, TU.OBJ, TU.INP и компилятор G95. Cобрать экзешник получилось, но собрать DLL не могу. Большое кол-во ошибок вида : tu.o:tu.FOR:(.text+0x2ce5): undefined reference to `__g95_st_write' tu.o:tu.FOR:(.text+0x2cf3): undefined reference to `__g95_transfer_integer' ... tu.o:tu.FOR:(.text+0x2f7d): undefined reference to `__g95_line' tu.o:tu.FOR:(.text+0x2f8e): undefined reference to `__g95_ioparm' tu.o:tu.FOR:(.text+0x2f98): undefined reference to `__g95_ioparm' последовательность действий: 1) g95 tu.for -freal-loops -c (получил обьектный tu.o) 2) ld tu.o может кто посоветует путь попроще, есть же более современные компиляторы. Или может есть возможность сразу сделать Dll из obj ? Тогда чем? |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Если речь зашла о других компиляторах, можешь попробовать Intel Visual Fortran, соответсвующие версии которого интегрируются в MS Visual Studio 200X.NET.
Там при создании проекта указывается тип проекта - DLL. Непосредственно в коде с помощью DEC-директив надо указать имена процедур и объектов данных, которые экспортируются из DLL. Это сообщение отредактировал(а) FCM - 1.12.2009, 19:04 |
|||
|
||||
S1oven |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.9.2009 Репутация: нет Всего: нет |
Можно чуть-чуть по подробнее. Я должен пометить каждую процедуру и аргументы? |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Аргументы процедур не надо. Только то, что может иметь (внешние) связи ("linkage"): имена внешних процедур, СОMMON-блоков, модульных данных и процедур.
Пример, применения директив к имени процедуры в DLL можешь увидеть в п.3.1 топика http://forum.vingrad.ru/topic-103924.html Хотя там общая тема другая, но в п.3.1 приводится код фортран-подпрограмм, которые собираются в DLL. Это сообщение отредактировал(а) FCM - 1.12.2009, 20:47 |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
Директивы для аргументов могут понадобиться (но не DLLEXPORT), если нужно подрегулировать способ их передачи в процедуру: по значению или по ссылке. Кроме того, способ передачи аргументов неявно зависит от соглашения о вызове функции (например STDCALL), которое тоже может быть отрегулировано с помощью директив.
Упомянутые директивы - специфика компиляторов семейства Visual Fortran. Можно, если используемый компилятор поддерживает стандарт Fortran-2003, попробовать воспользоваться средствами модуля ISO_C_BINDING, но точно не скажу, обеспечивают ли они (или может даже превосходят) те же возможности, которые дают директивы VF. См. также систему помощи IVF Это сообщение отредактировал(а) FCM - 2.12.2009, 10:55 |
|||
|
||||
S1oven |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 3.9.2009 Репутация: нет Всего: нет |
О, отлично, спасибо за помошь
|
|||
|
||||
popovda |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 290 Регистрация: 9.6.2006 Где: Москва Репутация: нет Всего: 6 |
Я пользуюсь iso_c_binding регулярно. Предупреждаю, что для IntelFortran всё равно требуется указание директив препроцессору. Зато с именами процедур проблем не будет. Указывается имя процедуры буквально так (с учетом регистра), как оно будет передано линковщику. Вот. Тут где-то мой пример по iso_c_binding валялся.
-------------------- С уважением, Попов Д.А. |
|||
|
||||
FCM |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.3.2009 Репутация: 8 Всего: 9 |
||||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Fortran | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |