Jl_init() causing segmentation fault

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;
}