Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] .obj, .o, .Dll, Помогите разобраться 
:(
    Опции темы
S1oven
Дата 1.12.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 ? Тогда чем?
PM MAIL   Вверх
FCM
Дата 1.12.2009, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Если речь зашла о других компиляторах, можешь попробовать Intel Visual Fortran, соответсвующие версии которого интегрируются в MS Visual Studio 200X.NET.
Там при создании проекта указывается тип проекта - DLL.
Непосредственно в коде с помощью DEC-директив надо указать имена процедур и объектов данных, которые экспортируются из DLL.

Это сообщение отредактировал(а) FCM - 1.12.2009, 19:04
PM MAIL   Вверх
S1oven
Дата 1.12.2009, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.9.2009

Репутация: нет
Всего: нет



Цитата(FCM @ 1.12.2009,  19:02)
Непосредственно в коде с помощью DEC-директив надо указать имена процедур и объектов данных, которые экспортируются из DLL.

Можно чуть-чуть по подробнее. Я должен пометить каждую процедуру и аргументы? 
PM MAIL   Вверх
FCM
Дата 1.12.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
FCM
Дата 2.12.2009, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Директивы для аргументов могут понадобиться (но не DLLEXPORT), если нужно подрегулировать способ их передачи в процедуру: по значению или по ссылке. Кроме того, способ передачи аргументов неявно зависит от соглашения о вызове функции (например STDCALL), которое тоже может быть отрегулировано  с помощью директив.

Упомянутые директивы - специфика компиляторов семейства Visual Fortran.
Можно, если используемый компилятор поддерживает стандарт Fortran-2003, попробовать воспользоваться средствами модуля ISO_C_BINDING, но точно не скажу, обеспечивают ли они (или может даже превосходят) те же возможности, которые дают директивы VF.

См. также систему помощи IVF

Это сообщение отредактировал(а) FCM - 2.12.2009, 10:55
PM MAIL   Вверх
S1oven
Дата 2.12.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.9.2009

Репутация: нет
Всего: нет



О, отлично, спасибо за помошь 
PM MAIL   Вверх
popovda
Дата 13.12.2009, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Я пользуюсь iso_c_binding регулярно. Предупреждаю, что для IntelFortran всё равно требуется указание директив препроцессору. Зато с именами процедур проблем не будет. Указывается имя процедуры буквально так (с учетом регистра), как оно будет передано линковщику. Вот. Тут где-то мой пример по iso_c_binding валялся.


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
FCM
Дата 13.12.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



Цитата(popovda @  13.12.2009,  01:21 Найти цитируемый пост)
Предупреждаю, что для IntelFortran всё равно требуется указание директив препроцессору.


Непонятно. Разве соответствующие версии IVF не поддерживают iso_c_binding в полном объеме?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.