2009-11-22 16 views
22

私はCプログラムをコンパイルしようとしていますが、 'RTLD_NEXT'というエラーは表示されません。私はこれがcプログラムに含まれているdlfcn.hで定義されていると考えられますが、dlfcn.hの内部を見るとRTLD_NEXTはありません。'RTLD_NEXT'は宣言されていません

これを修正するにはどうすればよいですか?

+0

あなたはより良いあなたが続く_GNU_SOURCEを定義していない場合、正確にどのようなLinuxディストリビューションとgccのバージョンを教えていた:#define _GNU_SOURCE さらに、これはあなたの最初のプリプロセッサdirective.For例でなければなりません。 – bmargulies

+3

@bmargulies:彼はcygwinを使っています(http://stackoverflow.com/questions/1777523/how-to-make-this-c-program-compile/1777566#1777566)。これは 'RTLD_NEXT'をサポートしていません。 http://lists.zerezo.com/cygwin/msg38882.html) – Christoph

答えて

2

ソースの最初の行に#define __GNU_SOURCEをお試しください。

+0

これはすでにプログラムのソースにあります。 – neuromancer

+1

は '__GNU_SOURCE'にする必要があります。 –

+6

これは実際には' __USE_GNU'です。これは今、「RTLD_NEXT」のGoogleのトップ結果です。 – correnos

26

ここでの問題は、RTLD_NEXTposix standardで定義されていないことです。だから、#define _GNU_SOURCEまたは-D_GNU_SOURCE以外のGNUの人々はそれを有効にしません。

その他のPOSIXの部分はdlfcn.hdlsym.hです。興味深いことに、後者にはRTLD_NEXTが記載されています。どうやら、GNUの人々は、拡張とは何かについて混乱しているようです。

+0

http://www.opengroup.org/onlinepubs/009695399/basedefs/dlfcn.h.htmlへのリンクとhttp://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_07へのリンク – Christoph

9

man dlsymによれば、#define _GNU_SOURCEdlfcn.hが含まれている前に(ちょうど1つの先頭の下線)です。 (RHEL6.1)。

0

1つのアンダースコアが必要です。

#define _GNU_SOURCE 
#include <stdio.h> 
関連する問題