Передаю я и const char* , и через char *, а вот изменить я его не пытаюсь , вываливается при попытке просто вывести строку на консоль
printf("\n**%s**\n",asd);
И если я напутал с char, то почему когда я компилю gcc все нормально, а когда не изменяя программы , этот же файл компилю g++, получается вот такая фигня.
lib.c
#include <stdio.h>
double power2(double x, char *asd)
{
printf("\n**%s**\n",asd);
return x*x;
}
double power3(double x)
{
return x*x*x;
}
main.c
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char* argv[])
{
void *ext_library;
double value = 0;
double (*powerfunc)(double x, char *qqq);
printf("Hello! Start");
ext_library = dlopen("./libpowers.so",RTLD_LAZY);
if(!ext_library)
{
fprintf(stderr,"dlopen() error: %s\n",dlerror());
return 1;
}
powerfunc = dlsym(ext_library,"power2");
value = 3.0;
printf("%s(%f) = %f\n",argv[1],value,(*powerfunc)(value, "zzz"));
dlclose(ext_library);
}
теперь компилю:
g++ main.c -ldl
g++ -fPIC -c lib.c
g++ -shared lib.o -o libpowers.so
при выполнении ошибка сегментирования. если теперь не изменяя файл бибилиотеки перекомпилить
gсс -fPIC -c lib.c
gсс -shared lib.o -o libpowers.so
то все работает нормально.