2009-11-22 10 views
22

Estoy intentando compilar un programa en C pero me aparece el error 'RTLD_NEXT' no declarado. Creo que se supone que esto se define en dlfcn.h que incluye el programa c, pero cuando miré dentro dlfcn.h no hay RTLD_NEXT.'RTLD_NEXT' no declarado

¿Cómo puedo solucionar esto?

+0

Usted nos cuentes mejor exactamente qué distribución de Linux y la versión de gcc si está definiendo _GNU_SOURCE y no tener éxito. – bmargulies

+3

@bmargulies: está usando cygwin (ver http://stackoverflow.com/questions/1777523/how-to-make-this-c-program-compile/1777566#1777566), que no admite 'RTLD_NEXT' (ver, por ejemplo, http://lists.zerezo.com/cygwin/msg38882.html) – Christoph

Respuesta

2

Pruebe #define __GNU_SOURCE como primera línea en sus fuentes.

+0

Ya está allí en la fuente del programa. – neuromancer

+1

Debería ser '__GNU_SOURCE' –

+6

De hecho, es' __GEN_GNU', simplemente ya que este es el resultado superior de Google para "RTLD_NEXT" ahora. – correnos

26

El problema aquí es que RTLD_NEXT no está definido por posix standard. Entonces la gente de GNU no lo habilita a menos que usted #define _GNU_SOURCE o -D_GNU_SOURCE.

Otras piezas relevantes de POSIX son dlfcn.h y dlsym.h. Curiosamente, la última menciona RTLD_NEXT. Aparentemente, la gente de GNU está un poco confundida acerca de qué es una extensión y qué no.

+0

mejor enlace a http://www.opengroup.org/onlinepubs/009695399/basedefs/dlfcn.h.html y http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html#tag_03_112_07 – Christoph

9

Según man dlsym es #define _GNU_SOURCE (sólo un subrayado inicial) antes de se incluye la dlfcn.h. (RHEL6.1).

0

Debe haber un guión bajo. #define _GNU_SOURCE Además, este debe ser su primera preprocesador ejemplo directive.For:

#define _GNU_SOURCE 
#include <stdio.h> 
Cuestiones relacionadas