The first argument to ccall must be (:f, :libfoo) where the second argument is a literal string or symbol.
> On Mar 10, 2014, at 3:10 PM, Patrick Foley <[email protected]> > wrote: > > I have changed the function to now be > "extern double bessela1(double x) { " > > Everything still compiles nicely, but I get the same error. > > - Patrick > > >> On Monday, March 10, 2014 2:45:12 PM UTC-4, Patrick Foley wrote: >> Hi All, >> >> I wrote some C code to compute a ratio of bessel functions, and am now >> trying to access it with Julia. I have compiled it into a shared library >> with >> "gcc -std=c99 -fPIC -shared -lm bessela1.c -o bessela1.so". >> This compiles without any errors or warnings, and the code works. >> >> I'm trying to use a function >> ''' >> double bessela1(double x) { >> // lots of code. >> return y; >> } >> ''' defined within the bessela1.c file. All functions it needs are also in >> the .c file, and I don't use any other files. >> >> So in my Julia code, I have >> s = ccall( (:bessela1, path), Float64, (Float64, ), 0.5) >> and path is the path to the bessela1.so file. >> >> When I run this in julia, I get the following error: >> ERROR: type: anonymous: in ccall: first argument not a pointer or valid >> constant expression, expected DataType, got Type{(Any...,)} >> in anonymous at no file >> >> >> I believe that the C code is compiling correctly (I know it works in C), and >> I can run dlopen() on the .so file and get a pointer back, but I'm not sure >> what to do with that. >> >> Can anyone point out what I'm doing incorrectly? I've also tried using >> "bessela1" rather than :bessela1, but get the same error. >> >> Thanks, >> Patrick
