0

Я получаю следующие сообщения об ошибках в моей системе OS X 10.8 с Xcode 5.0.2 и gfortran 4.8.2, установленными через homebrew.незаконное перемещение указателя функции с использованием gfortran на OS X 10.8

% gfortran -shared f03_iso_c.f03 
ld: illegal text-relocation to '_compute' in /var/folders/w3/_r4gjs1d363176f99wgkpwl80000gn/T//cc8VFCuI.o from 'anon' in /var/folders/w3/_r4gjs1d363176f99wgkpwl80000gn/T//cc8VFCuI.o for architecture x86_64 
collect2: error: ld returned 1 exit status 

Содержание f03_iso_c.f03 являются

module F03_ISO_C 
    use, intrinsic :: iso_c_binding 

    contains 

    integer(c_int) function compute() bind(c) result(compute) 
    use, intrinsic :: iso_c_binding 
    implicit none 

    compute = 1 
    return 

    end function compute 

end module F03_ISO_C 

integer function F03_ISO_C_init() 
    use F03_ISO_C 
    use, intrinsic :: iso_c_binding 

    implicit none 

    call USE_FUNC_PTR(c_funloc(compute)) 

    F03_ISO_C_init = 1 
    return 

end function F03_ISO_C_init 

subroutine USE_FUNC_PTR(f1) 
    use, intrinsic :: iso_c_binding 

    implicit none 

    type(c_funptr) :: f1 

    print *, f1, "is the address" 

end subroutine USE_FUNC_PTR 

Любая помощь в решении этой ошибки будет высоко ценится.

+0

Этот вопрос был рассмотрен на GCC сайте Фортран Bugzilla. Вы можете увидеть подробности здесь: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59888 – user6230457

ответ

0

Я бы сказал, что функция вычисления() не очень хорошо написано, попробуйте следующее:

function compute() bind(c) result(out) 
    use, intrinsic :: iso_c_binding 
    implicit none 
    integer(c_int) :: out 

    out = 1 
    return 

end function compute 
+0

Без изменений. Это дает тот же результат. – user6230457

+0

Какая разница, вы предлагаете исправить «плохо написано»? Я согласен с тем, что код, заданный в вопросе, не соответствует Fortran, но вы делаете несколько изменений. – francescalus

 Смежные вопросы

  • Нет связанных вопросов^_^