2011-12-12 27 views
11

を無視し、私は次のエラーを取得する...ERROR:ld.so:オブジェクトのgetpid.so「LD_PRELOADからはプリロードすることができません:私は、次のようにLD_PRELOADを使用しようとすると、</p> <pre><code>LD_PRELOAD=getpid.so ./testpid </code></pre> <p>を

ERROR: ld.so: object 'getpid.so' from LD_PRELOAD cannot be preloaded: ignored. 

私は

gcc -Wall -fPIC -shared -o getpid.so getpid.c 

を使用してgetpid.soコンパイルし、それは次のコードが含まれています...

ここで問題になることが何
gcc testpid -o testpid.c 

を行うことによってコンパイルされ、以下に示すと通りGETPID使用しています
// getpid.c 
#include <sys/syscall.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <stdio.h> 

pid_t getpid(void) 
{ 
    printf("Hello, world!\n"); 
    return syscall(SYS_getpid); 
} 

tespid.c constainsコード? LD_PRELOADが機能しないのはなぜですか?

// testpid.c 
#include <sys/syscall.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <stdio.h> 

int main() 
{ 
    printf("pid = %d!\n", getpid()); 

    return 0; 
} 

答えて

18

ローダがライブラリへのパスを言及していませんでしたとしてgetpid.soを見つけることができないように見えます。

試してみてください。

LD_PRELOAD=/full/path/to/getpid.so ./testpid 
+3

非常に真! LD_PRELOAD = getpid.so ./testpidの代わりに、LD_PRELOAD =。/ getpid.so ./testpidにする必要があります。今はその仕事。 – MetallicPriest

+2

私の場合は、 'LD_LIBRARY_PATH'を設定し、64ビットバージョンのライブラリを入手しなければなりませんでした。 –

関連する問題

 関連する問題