http://www.firststeps.ru/linux/
Шаг 8 - Функции работы с динамическими библиотеками
main.c я немножко изменил
#include <stdio.h>
/* заголовочный файл для работы с динамическими библиотеками */
#include <dlfcn.h>
int main(int argc, char* argv[]){
void *ext_library; // хандлер внешней библиотеки
double value=0; // значение для теста
double (*powerfunc)(double x); // переменная для хранения адреса функции
//загрузка библиотеки
ext_library = dlopen("./libpowers.so",RTLD_LAZY);
if (!ext_library){
//если ошибка, то вывести ее на экран
fprintf(stderr,"dlopen() error: %s\n", dlerror());
return 1;
};
//загружаем из библиотеки требуемую процедуру
powerfunc = (double (*)(double))dlsym(ext_library, argv[1]);
value=3.0;
//выводим результат работы процедуры
printf("%s(%f) = %f\n",argv[1],value,(*powerfunc)(value));
//закрываем библиотеку
dlclose(ext_library);
};
lib.c такой же как на сайте
double power2(double x){
return x*x;
};
double power3(double x){
return x*x*x;
};
double power4(double x){
return power2(x)*power2(x);
};
компилируем так же как на сайте
gcc -fPIC -c lib.c
gcc -shared lib.o -o libpowers.so
gcc main.c -o main -ldl
вызываем ./main power2 все работает правильно
а если скомпилировать c помощью g++
mv lib.c lib.cpp
mv main.c main.cpp
g++ -fPIC -c lib.cpp
g++ -shared lib.o -o libpowers.so
g++ main.cpp -o main -ldl
вызываем ./main power2 Ошибка сегментирования
я, как истинный виндязутко и создатель dll, негодую =) что же неправильно?