Segfault in shared object when writeln
Harpo via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jun 3 20:49:23 PDT 2014
Hello I am having the following problem. I am trying to turn a
program I have written into a shared object. I have ran into some
problems however. When I use writeln instead of printf my program
segfaults. I have edited the code to just the parts causing the
problem.
=================main.d the so========================
import std.stdio;
import core.stdc.stdio;
extern (C) void main(){
writeln("Does it work?");
printf("Works");
}
==============main.c the main executable======================
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
int main() {
printf("+main()\n");
void *lh = dlopen("THE PATH EDITED FOR MY SECURITY", RTLD_LAZY);
if (!lh) {
fprintf(stderr, "dlopen error: %s\n", dlerror());
exit(1);
}
printf("libdll.so is loaded\n");
void (*fn)() = dlsym(lh, "main");
char *error = dlerror();
if (error) {
fprintf(stderr, "dlsym error: %s\n", error);
exit(1);
}
printf("dll() function is found\n");
(*fn)();
printf("unloading libdll.so\n");
dlclose(lh);
printf("-main()\n");
return 0;
}
========================The compile script===============
dmd -c main.d -fPIC
dmd -oflibdll.so main.o -shared -defaultlib=libphobos2.so
-L-rpath=/usr/lib/x86_64-linux-gnu -L-ldl -gc
gcc -c main.c
gcc -rdynamic main.o -o main -ldl
=====================================================================
When I have just printf is works. When I have writeln it
segfaults.
This fails
import std.stdio;
extern (C) void main(){
writeln("Does it work?");
}
This works
import core.stdc.stdio;
extern (C) void main(){
printf("Works");
}
===========================================================================
Any one know whats up? Thanks!
-Harpo
More information about the Digitalmars-d-learn
mailing list