gcc vs g++ for dlopen
Kolesar
asim.husanovic@gmail.com
Wed Nov 26 16:24:00 GMT 2008
Hi all
Im writed small test program for dlopen
int main (int argc, char **argv)
{
int exitcode = EXIT_OK;
char *dlopen_name = NULL;
char *dlsym_file = NULL;
void *dll;
int i;
for (i=1; i<argc; ++i)
{
if (0==strcmp(argv[i], "-dlopen"))
{
dlopen_name = argv[++i];
}
else if (0==strcmp(argv[i], "-dlsym"))
{
dlsym_file = argv[++i];
}
else
{
printf ("%s", USAGE);
return EXIT_EUSAGE;
}
}
printf ("\n");
dll = dlopen (dlopen_name, /*RTLD_NOW*/RTLD_LAZY);
if (!dll)
{
fprintf (stderr, "ERR dlopen(%s) %s\n", dlopen_name, dlerror());
return EXIT_EDLOPEN;
}
printf ("OK dlopen(%s)=%p\n", dlopen_name, dll);
if (dlsym_file)
{
char line[1024]={0};
FILE *in = fopen (dlsym_file, "r");
if (!in)
{
fprintf (stderr, "ERR fopen(%s) %s\n", dlsym_file, strerror(errno));
return EXIT_EREAD;
}
while (fgets(line, sizeof(line)/sizeof(line[0])-1, in))
{
void *addr;
char *eol = strchr(line, '\n');
if (eol) *eol = '\0';
if (strchr(line, '#'))
continue;
addr = dlsym(dll, line);
if (!addr)
{
fprintf (stderr, "ERR dlsym(%s) %s\n", line, dlerror());
exitcode = EXIT_EDLSYM;
}
else
{
printf ("OK dlsym(%s)=%p\n", line, addr);
}
}
exitcode = exitcode!=EXIT_OK? exitcode : ferror(in)? EXIT_EREAD : EXIT_OK;
fclose(in);
}
return exitcode;
}
when compiled this test program with:
gcc -c test_library.c -o test_library1.o
g++ test_library1.o -o test_library1 -ldl
#>test_library1 -dlopen ./libasim.so
OK dlopen(./libasim.so)=0x804b020
but, when i build with:
gcc -ldl test_library.c -o test_library
#>test_library -dlopen ./libasim.so
Segmentation fault
I need gcc (second) option.
help me, please.
BR
--
View this message in context: http://www.nabble.com/gcc-vs-g%2B%2B-for-dlopen-tp20699786p20699786.html
Sent from the gcc - Help mailing list archive at Nabble.com.
More information about the Gcc-help
mailing list