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, негодую =) что же неправильно?








