techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|||||||||||
1 | |||||||||||
Линковка фортрана к сишечке06.01.2017, 16:41. Показов 1939. Ответов 7
Метки нет (Все метки)
Использую gfortran, gcc.
Линкую объектники фортрана к проге на си. Все отлично линкуется, но есть вопрос. Почему к внешним меткам фортрана добавляется символ _? соответственно, в си приходится писать не
0
|
06.01.2017, 16:41 | |
Ответы с готовыми решениями:
7
Статическая линковка VS динамическая линковка из фортрана в с++ Отличия фортрана и С++ Переписать программу с фортрана |
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
|
Модератор
|
|
12.01.2017, 12:11 | 4 |
- может быть как раз влияет. Напр. никто не мешает назвать внешнюю функцию в фортране "printf". Если не менять имена, возможен конфликт. Ну, как вариант. А точный ответ знают разработчики данной версии фортрана.
0
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
12.01.2017, 15:41 [ТС] | 5 |
Хм... Насчет printf, это и правда аргумент... Слабенький, конечно... Попробую где-нибудь в рассылке спросить .
0
|
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
|
|
12.01.2017, 18:25 [ТС] | 7 |
Но ведь его можно просто не экспортировать...
0
|
12.01.2017, 22:04 | 8 |
Сообщение было отмечено 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 | |
12.01.2017, 22:04 | |
Помогаю со студенческими работами здесь
8
Перевод с Фортрана на VBA Перевести на паскаль с фортрана Компилятор для фортрана Список ошибок Фортрана Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |