до ccall
пользовательской библиотеки, мне нужно записать полный путь к библиотеке в системе:
j = ccall((:add3, "[FULL_PATH]/libmylib.so"), Float32, (Float32,), 2)
Я пытаюсь использовать вместо этого относительный путь с:
j = ccall((:add3, "$(pwd())/libmylib.so"), Float32, (Float32,), 2)
но, в то время как "$(pwd())/libmylib.so"
возвращает правильный путь к библиотеке, ccall
с pwd
возвращает TypeError: in ccall: first argument not a pointer or valid constant expression, expected Ptr, got Tuple{Symbol,String}
.
Итак, как вызвать библиотеку, находящуюся в той же папкечем скрипт Julia / текущий рабочий каталог?
Я озадачен, так как согласно этот поток в Windows, кажется, работает, даже если документ для ccall
указывает:
Обратите внимание, что кортеж типа аргумента должен быть буквальным кортежем, а не переменной или выражением с кортежем.
Для информации, я в Ubuntu 18.04, и библиотека былареализовано с помощью
mylib.c:
float add3 (float i){
return i+3;
}
mylib.h:
#ifndef _MYLIB_H_
#define _MYLIB_H_
extern float get2 ();
extern float add3 (float i);
Компиляция (gcc):
gcc -o mylib.o -c mylib.c
gcc -shared -o libmylib.so mylib.o -lm -fPIC