Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
turns out the problem wasn't name mangling, but rather that the C++ function was defined to be static. hence readelf labelling it as "local". removing "static" and recompiling fixed the ccall errors.
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
there might be a way to fix this, but since i'm in a hurry, i decided to just modify the C++ so as to avoid mangling. thanks for the help.
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
Oh yea. I cut-n-pasted the wrong line, well I'll just fix that and *echo __ZL7initGPUP9resamplerPKjS2_j|c++filt**initGPU(resampler*, unsigned int const*, unsigned int const*, unsigned int)* different symbol same comment. but if it has to be this way, hmm FUNC LOCAL DEFAULT ---> that function isn't declared static is it?
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
This symbol is an object (maybe a lambda?) that is defined inside another function (init_GPU). However, this isn't what Ben is trying to call. -erik On Fri, Nov 21, 2014 at 10:59 AM, Jeff Waller wrote: > bizarro% echo __ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__01 |c++filt > initGPU(resampler*, unsigned int const*, unsigned int const*, unsigned > int)::__FUNCTION__ > > > I'm not entirely sure what that even means (virtual table?), but you know > what? I bet you compiled this with clang because when I do that same thing > on Linux, it's like "wa?". Because of that, and exceptions, and virtual > table layout, and the standard calling for no standard ABI, I agree, can't > you wrap all the things you want to export with extern "C"? -- Erik Schnetter http://www.perimeterinstitute.ca/personal/eschnetter/
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
*bizarro% echo __ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__01 |c++filt**initGPU(resampler*, unsigned int const*, unsigned int const*, unsigned int)::__FUNCTION__* I'm not entirely sure what that even means (virtual table?), but you know what? I bet you compiled this with clang because when I do that same thing on Linux, it's like "wa?". Because of that, and exceptions, and virtual table layout, and the standard calling for no standard ABI, I agree, can't you wrap all the things you want to export with extern "C"?
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
i should've mentioned i had tried removing the underscore already. didn't work.
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
Ben It could be that you need to leave out the leading underscore in the ccall expression. -erik On Fri, Nov 21, 2014 at 10:13 AM, Ben Arthur wrote: > i'm trying to use readelf and ccall as suggested for a C++ shared library, > and get the following error. any ideas? thanks. > > > $ readelf -sW /path/to/lib/libengine.so | grep resampler | grep init > > 101: 3f10 832 FUNC LOCAL DEFAULT 11 > _ZL7initGPUP9resamplerPKjS2_j > > 102: 4dc4 8 OBJECT LOCAL DEFAULT 13 > _ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__ > > > > julia> > dlopen("/path/to/lib/libengine.so",RTLD_LAZY|RTLD_DEEPBIND|RTLD_GLOBAL) > > Ptr{Void} @0x06fc9c40 > > > julia> ccall((:_ZL7initGPUP9resamplerPKjS2_j, "/path/to/lib/libengine.so"), > Int, (Ptr{Void},Ptr{Cuint},Ptr{Cuint},Cuint), arg1,arg2,arg3,arg4) > > ERROR: ccall: could not find function _ZL7initGPUP9resamplerPKjS2_j in > library /path/to/lib/libengine.so > > > in anonymous at no file > > > julia> ccall((:_ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__, > "/path/to/lib/libengine.so"), Int, (Ptr{Void},Ptr{Cuint},Ptr{Cuint},Cuint), > arg1,arg2,arg3,arg4) > > ERROR: ccall: could not find function > _ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__ in library > /path/to/lib/libengine.so > > in anonymous at no file -- Erik Schnetter http://www.perimeterinstitute.ca/personal/eschnetter/
Re: [julia-users] calling libraries of c++ or fortran90 code in Julia
i'm trying to use readelf and ccall as suggested for a C++ shared library, and get the following error. any ideas? thanks. $ readelf -sW /path/to/lib/libengine.so | grep resampler | grep init 101: 3f10 832 FUNC LOCAL DEFAULT 11 _ZL7initGPUP9resamplerPKjS2_j 102: 4dc4 8 OBJECT LOCAL DEFAULT 13 _ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__ julia> dlopen("/path/to/lib/libengine.so",RTLD_LAZY|RTLD_DEEPBIND|RTLD_GLOBAL) Ptr{Void} @0x06fc9c40 julia> ccall((:_ZL7initGPUP9resamplerPKjS2_j, "/path/to/lib/libengine.so"), Int, (Ptr{Void},Ptr{Cuint},Ptr{Cuint},Cuint), arg1,arg2,arg3,arg4) ERROR: ccall: could not find function _ZL7initGPUP9resamplerPKjS2_j in library /path/to/lib/libengine.so in anonymous at no file julia> ccall((:_ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__, "/path/to/lib/libengine.so"), Int, (Ptr{Void},Ptr{Cuint},Ptr{Cuint},Cuint), arg1,arg2,arg3,arg4) ERROR: ccall: could not find function _ZZL7initGPUP9resamplerPKjS2_jE12__FUNCTION__ in library /path/to/lib/libengine.so in anonymous at no file