2009-11-22 7 views
22

Sto provando a compilare un programma in C ma ottengo l'errore 'RTLD_NEXT' non dichiarato. Penso che questo dovrebbe essere definito in dlfcn.h che include il programma c, ma quando ho guardato dentro dlfcn.h non c'è RTLD_NEXT.'RTLD_NEXT' non dichiarato

Come posso risolvere questo problema?

+0

Fareste meglio a dirci esattamente cosa distro Linux e la versione gcc se si sta definendo _GNU_SOURCE e non riuscendo. – bmargulies

+3

@bmargulies: sta usando cygwin (vedi http://stackoverflow.com/questions/1777523/how-to-make-this-c-program-compile/1777566#1777566), che non supporta 'RTLD_NEXT' (vedi eg http://lists.zerezo.com/cygwin/msg38882.html) – Christoph

risposta

2

Prova #define __GNU_SOURCE come prima riga nelle tue fonti.

+0

È già presente nella fonte del programma. – neuromancer

+1

Dovrebbe essere '__GNU_SOURCE' –

+6

In realtà' __USE_GNU', è sufficiente notare che questo è il risultato di Google più alto per "RTLD_NEXT" ora. – correnos

26

Il problema qui è che RTLD_NEXT non è definito dallo posix standard. Quindi le persone GNU non lo abilitano a meno che non si sia #define _GNU_SOURCE o -D_GNU_SOURCE.

Altri pezzi rilevanti di POSIX sono dlfcn.h e dlsym.h. È interessante notare che il successivo menziona RTLD_NEXT. Apparentemente, le persone GNU sono un po 'confuse su cosa sia un'estensione e cosa no.

+0

link migliore a http://www.opengroup.org/onlinepubs/009695399/basedefs/dlfcn.h.html e http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_07 – Christoph

9

Secondo man dlsym è #define _GNU_SOURCE (solo un leader di sottolineatura) prima il dlfcn.h è incluso. (RHEL6.1).

0

Ci deve essere un trattino di sottolineatura. #define _GNU_SOURCE Inoltre, questo deve essere il vostro primo preprocessore esempio directive.For:

#define _GNU_SOURCE 
#include <stdio.h>