私はCプログラムをコンパイルしようとしていますが、 'RTLD_NEXT'というエラーは表示されません。私はこれがcプログラムに含まれているdlfcn.hで定義されていると考えられますが、dlfcn.hの内部を見るとRTLD_NEXTはありません。'RTLD_NEXT'は宣言されていません
これを修正するにはどうすればよいですか?
私はCプログラムをコンパイルしようとしていますが、 'RTLD_NEXT'というエラーは表示されません。私はこれがcプログラムに含まれているdlfcn.hで定義されていると考えられますが、dlfcn.hの内部を見るとRTLD_NEXTはありません。'RTLD_NEXT'は宣言されていません
これを修正するにはどうすればよいですか?
ソースの最初の行に#define __GNU_SOURCE
をお試しください。
これはすでにプログラムのソースにあります。 – neuromancer
は '__GNU_SOURCE'にする必要があります。 –
これは実際には' __USE_GNU'です。これは今、「RTLD_NEXT」のGoogleのトップ結果です。 – correnos
ここでの問題は、RTLD_NEXT
がposix standardで定義されていないことです。だから、#define _GNU_SOURCE
または-D_GNU_SOURCE
以外のGNUの人々はそれを有効にしません。
その他のPOSIXの部分はdlfcn.hとdlsym.hです。興味深いことに、後者にはRTLD_NEXT
が記載されています。どうやら、GNUの人々は、拡張とは何かについて混乱しているようです。
http://www.opengroup.org/onlinepubs/009695399/basedefs/dlfcn.h.htmlへのリンクとhttp://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_07へのリンク – Christoph
man dlsym
によれば、#define _GNU_SOURCE
dlfcn.h
が含まれている前に(ちょうど1つの先頭の下線)です。 (RHEL6.1)。
1つのアンダースコアが必要です。
#define _GNU_SOURCE
#include <stdio.h>
あなたはより良いあなたが続く_GNU_SOURCEを定義していない場合、正確にどのようなLinuxディストリビューションとgccのバージョンを教えていた:
#define _GNU_SOURCE
さらに、これはあなたの最初のプリプロセッサdirective.For例でなければなりません。 – bmargulies@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