2009-11-22 119 views
22

我試圖編譯一個C程序,但我得到未聲明的錯誤'RTLD_NEXT'。我認爲這應該在c程序包含的dlfcn.h中定義,但是當我在dlfcn.h裏面查看時,沒有RTLD_NEXT。'RTLD_NEXT'未聲明

我該如何解決這個問題?

+0

可要告訴我們,如果要定義_GNU_SOURCE並沒有成功正是Linux發行版和gcc版本。 – bmargulies 2009-11-22 02:21:07

+3

@bmargulies:他使用的是cygwin(請參閱http://stackoverflow.com/questions/1777523/how-to-make-this-c-program-compile/1777566#1777566),它不支持'RTLD_NEXT'(請參閱eg http://lists.zerezo.com/cygwin/msg38882.html) – Christoph 2009-11-22 02:41:05

回答

2

嘗試#define __GNU_SOURCE作爲您的消息來源的第一行。

+0

它已經在程序源代碼中。 – neuromancer 2009-11-22 01:45:44

+1

應該是'__GNU_SOURCE' – 2010-06-28 18:06:37

+6

它實際上是'__USE_GNU',只是注意到,因爲這是Google對於「RTLD_NEXT」的最高結果。 – correnos 2012-04-02 13:33:01

26

這裏的問題是沒有被posix standard定義。所以GNU人不會啓用它,除非你是#define _GNU_SOURCE-D_GNU_SOURCE

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 2009-11-22 01:56:24

9

根據man dlsym#define _GNU_SOURCE(只有一個前導下劃線)包含在dlfcn.h之前。 (RHEL6.1)。

0

必須有一個下劃線。 #define _GNU_SOURCE 此外,這一定是你的第一個預處理器directive.For例如:

#define _GNU_SOURCE 
#include <stdio.h>