7
我使用LD_PRELOAD
掛鉤庫函數,並在Linux中它完美的作品。但我無法弄清楚如何在OSX中做同樣的事情。OSX上與LD_PRELOAD的確切等價物是什麼?
的設置我在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
Al上述l在Linux上運行良好,每個步驟在OSX上的工作方式相當於什麼?我已使用Google搜索並且無法使用它提供的信息,因爲某些步驟的信息丟失。
在此先感謝!
謝謝,我知道這很多:)但它不只是設置,我發現,我必須對我的來源進行重大修改,編譯步驟也不同。這是執行這些步驟,我不知道該怎麼辦:( – horseyguy 2011-12-15 04:41:33