Use jl_init_with_image__threading instead. That function exists…At least in Julia 1.3.1.
Here this might be easier, this is the file that I got working…I put julia in /tmp/…
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <julia.h>
int main(){
void *handle;
void (*jl_init_with_image)(const char*, const char*);
int (*jl_atexit_hook)(int);
void (*jl_eval_string)(const char*);
char *(*jl_get_default_sysimg_path)();
void (*jl_init)();
handle = dlopen("/tmp/julia-1.3.1/lib/libjulia.so", RTLD_LAZY | RTLD_GLOBAL);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
exit(EXIT_FAILURE);
}
*(&jl_init_with_image) = dlsym(handle, "jl_init_with_image__threading");
*(&jl_atexit_hook)= dlsym(handle, "jl_atexit_hook");
*(&jl_eval_string) = dlsym(handle, "jl_eval_string");
*(&jl_get_default_sysimg_path) = dlsym(handle, "jl_get_default_sysimg_path");
*(&jl_init) = dlsym(handle, "jl_init");
dlerror();
printf("jl_init_with_image: %p\n", (void*)jl_init_with_image);
printf("jl_atexit_hook: %p\n", (void*)jl_atexit_hook);
printf("jl_eval_string: %p\n", (void*)jl_eval_string);
printf("default sysimg path: %s\n", jl_get_default_sysimg_path());
jl_init_with_image("/tmp/julia-1.3.1/bin", jl_get_default_sysimg_path());
jl_eval_string("print('foo')");
jl_atexit_hook(0);
return 0;
}