I'm trying to compile a C program but I get the error 'RTLD_NEXT' undeclared. I think this is supposed to be defined in dlfcn.h which the c program includes, but when I looked inside dlfcn.h there is no RTLD_NEXT.
How do I fix this?
I'm trying to compile a C program but I get the error 'RTLD_NEXT' undeclared. I think this is supposed to be defined in dlfcn.h which the c program includes, but when I looked inside dlfcn.h there is no RTLD_NEXT.
How do I fix this?
According to
man dlsym
it is#define _GNU_SOURCE
(just one leading underscore) before thedlfcn.h
is included. (RHEL6.1).There must be one underscore.
#define _GNU_SOURCE
Further, this must be your first preprocessor directive.For example:Try
#define __GNU_SOURCE
as first line in your sources.The issue here is that
RTLD_NEXT
is not defined by the posix standard . So the GNU people don't enable it unless you#define _GNU_SOURCE
or-D_GNU_SOURCE
.Other relevant pieces of POSIX are dlfcn.h and dlsym.h. Interestingly, the later mentions
RTLD_NEXT
. Apparently, the GNU people are a bit confused about what is an extension and what is not.