Каков точный эквивалент LD_PRELOAD в OSX? - PullRequest
12 голосов
/ 15 декабря 2011

Я использую LD_PRELOAD для подключения библиотечной функции, и в Linux она работает отлично.Но я не могу понять, как сделать эквивалент в OSX.

У меня есть следующие настройки в Linux:

Код:

#include <stdio.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <unistd.h>
#include <ruby.h>

void
rb_raise(unsigned long exc, const char *fmt, ...)
{
  static void (*libruby_rb_raise)
    (unsigned long exc, const char *fmt, ...) = NULL;

  void * handle;
  char * error;

  if (!libruby_rb_raise) {
    handle = dlopen("/path/to/libruby.so",
                    RTLD_LAZY);
    if (!handle) {
      fputs(dlerror(), stderr);
      exit(1);
    }
    libruby_rb_raise = dlsym(handle, "rb_raise");
    if ((error = dlerror()) != NULL) {
      fprintf(stderr, "%s\n", error);
      exit(1);
    }
  }

  // ...code... 

  return Qnil;
}

Какой язатем скомпилируйте с:

gcc -Wall -O2 -fpic -shared -ldl -g -I/path/to/includes/ -o raise_shim.so raise_shim.c

Затем выполните с:

LD_PRELOAD=./raise_shim.so ruby

Все вышеперечисленное хорошо работает в Linux, что эквивалентно для каждого шага, чтобы это работало в OSX?Я прогуглил это и не смог заставить его работать с предоставленной информацией, так как информация для некоторых шагов отсутствует.

Заранее спасибо!

1 Ответ

16 голосов
/ 15 декабря 2011

Взгляните на DYLD_INSERT_LIBRARIES.Это переменная, которую вы ищете.

См. Также этот ответ .

...