Форум программистов, компьютерный форум, киберфорум
Fortran
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
1

Линковка фортрана к сишечке

06.01.2017, 16:41. Показов 1939. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Использую gfortran, gcc.
Линкую объектники фортрана к проге на си.
Все отлично линкуется, но есть вопрос.

Почему к внешним меткам фортрана добавляется символ _?

соответственно, в си приходится писать не
C
1
extern void hello()

C
1
extern void hello_()
... Хотя в фортране функция задана как hello. Должно быть так?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2017, 16:41
Ответы с готовыми решениями:

Статическая линковка VS динамическая линковка
Существует два типа линкования библиотек: статическое и динамическое. При статической линковке все...

из фортрана в с++
есть прожка на фортране, вычислительная, вроде и не сложная. нужно ее перегнать в билдер. может кто...

Отличия фортрана и С++
Здравствуйте!У меня стоит задача перевода с фортрана на с++!подскажи плиз как переменные такого...

Переписать программу с фортрана
Всем доброго времени суток! Появилась проблема, необходимо переписать программу с Фортрана на...

7
21 / 19 / 4
Регистрация: 26.08.2013
Сообщений: 172
09.01.2017, 12:01 2
Когда происходит вызов подпрограммы на одном языке в программе на другом необходимо определить порядок данных. Отсюда вытекают два соглашения о вызовах C и STDCALL. В фортране если использовать данные соглашения то имена автоматически переписываются с маленькой буквы и в начало добавляется символ _, в конце ставится @ и число байтов, выделяемых для параметров (в STDCALL). Это делается для обеспечения согласования имен с С.
Параметры при обращении к подпрограммам, определенным атрибутами C и STDCALL, передаются значением, а подпрограммы, использующие стандартные соглашения Fortran, передают параметры ссылкой, если не переопределено атрибутом VALUE.

Судя по всему у вас ноги растут оттуда же.
1
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
12.01.2017, 10:37  [ТС] 3
А зачем нужно таким образом изменять имя? почему нельзя экспортировать реальный мнемоник? Это же ни на что не влияет. Какая разница, какой символ экспортировать для линковки?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
12.01.2017, 12:11 4
Цитата Сообщение от Mirmik Посмотреть сообщение
Это же ни на что не влияет
- может быть как раз влияет. Напр. никто не мешает назвать внешнюю функцию в фортране "printf". Если не менять имена, возможен конфликт. Ну, как вариант. А точный ответ знают разработчики данной версии фортрана.
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
12.01.2017, 15:41  [ТС] 5
Хм... Насчет printf, это и правда аргумент... Слабенький, конечно... Попробую где-нибудь в рассылке спросить .
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,640
Записей в блоге: 13
12.01.2017, 17:42 6
Цитата Сообщение от Mirmik Посмотреть сообщение
Слабенький, конечно
- в чем слабость?
0
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
12.01.2017, 18:25  [ТС] 7
Но ведь его можно просто не экспортировать...
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
12.01.2017, 22:04 8
Лучший ответ Сообщение было отмечено Mirmik как решение

Решение

Цитата Сообщение от Mirmik Посмотреть сообщение
Слабенький, конечно
Мне вот тоже кажется, что причина была именно в этом. У языка Си свой стандарт, куда включены имена стандартных функций. У фортрана свой стандарт, правда там вроде бы как библиотечных функций нет, но есть встроенные функции с именами, которые могли бы пересечься с именами функций из стандарта Си (всякие sin, cos). Возможно, всё растёт вокруг этого

Доводы из поста #2 на мой взгляд не имет ничего общего с реальностью

Добавлено через 14 минут
У gfortran'а есть опция -fno-underscoring. В её описании в общем-то тоже говорится о конфликтах имён
https://gcc.gnu.org/onlinedocs... en-Options

Добавлено через 3 минуты
Там даже целый раздел посвящён этой проблеме. Возможно, что там среди всего прочего есть более внятно описанная причина
https://gcc.gnu.org/onlinedocs... mming.html
1
12.01.2017, 22:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2017, 22:04
Помогаю со студенческими работами здесь

Перевод с Фортрана на VBA
Не уверен нужно ли создавать отдельную тему, поэтому пишу здесь. Если что-то не так, прошу...

Перевести на паскаль с фортрана
Dimension x(100),y(100) zmax=0 print *,'Vvedite kol-vo tochek lomanoi' Read (*,*) M Print...

Компилятор для фортрана
Где найти практические инструкции по умению пользоваться компилятором,вернее как с помощью...

Список ошибок Фортрана
Есть ли какой-то сайт или может у кого файлик есть со всеми ошибками фортрана? А то есть к примеру...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru