Maybe this can help too:
http://maurow.bitbucket.org/notes/calling_fortran_from_misc.html

By using bind(c) or iso_c_binding name mangling is turned off.

On Fri, 2014-11-14 at 22:15, Luthaf <[email protected]> wrote:
> The first way to compile is the good one, but gfortran is slightly 
> changing the names of the function. You can see it by running the `nm` 
> command :
> ```
> $ nm simplemodule.so
> 0000000000000f98 T ___simplemodule_MOD_foo
> ```
>
> So you have to call `__simplemodule_MOD_foo`  from Julia side (yes, with 
> one underscore less. I don't know why ...)
>
> ```
> julia> ccall((:__simplemodule_MOD_foo, "simplemodule.so"), Int32, 
> (Int32,), 3)
> ```
>
> This will also lead to a segfault, as Fortran except values to be passed 
> by reference, and not by value. So the final call is
>
> ```
> julia>ccall((:__simplemodule_MOD_foo, "simplemodule.so"), Int32, 
> (Ptr{Int32},), &3)
>     6
> ```
>
> Regards,
> Guillaume
>
> Andre Bieler a écrit :
>> tried calling a simple fortran function from julia but did not succeed:
>> this is the fortran code:
>>
>> ||
>> !fileName =simplemodule.f95
>> modulesimpleModule
>>
>> contains
>> functionfoo(x)
>>   integer ::foo,x
>>   foo =x *2
>> endfunctionfoo
>>
>>
>> endmodulesimplemodule
>>
>>
>> which is then compiled with:
>>
>> *gfortran simplemodule.f95 -o simplemodule.so -shared -fPIC*
>>
>> and finally the julia call is:
>>
>> ||
>>
>> ccall((:foo,"/fullPathTo/simpleMod.so"),Int32,(Int32,),3)
>>
>>
>> which then leads to the following error:
>>
>> ERROR: ccall: could not find function foo in library 
>> /fullPathTo/simpleMod.so
>>  in anonymous at no file
>>
>>
>>
>> when compiling with:
>>
>> gfortran -c simplemodule.f95 -o simplemodule.so -shared -fPIC
>>
>> i get a different error:
>>
>> *ERROR: error compiling anonymous: could not load module 
>> /fullPathTo/simplemodule.so: /fullPathTo/simplemodule.so:*
>> *only ET_DYN and ET_EXEC can be loaded*
>>
>>
>>
>> Can anyone tell me what I am missing?
>> I do realize I would not need to call fortran to multiply a variable 
>> by 2, but its a starting point..
>>
>>
>> Thanks!
>> Andre

Reply via email to