我試圖編譯一個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 2009-11-22 01:45:44
應該是'__GNU_SOURCE' – 2010-06-28 18:06:37
它實際上是'__USE_GNU',只是注意到,因爲這是Google對於「RTLD_NEXT」的最高結果。 – correnos 2012-04-02 13:33:01
這裏的問題是沒有被posix standard定義。所以GNU人不會啓用它,除非你是#define _GNU_SOURCE
或-D_GNU_SOURCE
。
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 2009-11-22 01:56:24
根據man dlsym
是#define _GNU_SOURCE
(只有一個前導下劃線)包含在dlfcn.h
之前。 (RHEL6.1)。
必須有一個下劃線。 #define _GNU_SOURCE
此外,這一定是你的第一個預處理器directive.For例如:
#define _GNU_SOURCE
#include <stdio.h>
可要告訴我們,如果要定義_GNU_SOURCE並沒有成功正是Linux發行版和gcc版本。 – bmargulies 2009-11-22 02:21:07
@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