![]() |
#include <stdio.h>
#include <dlfcn.h> #include <iostream.h> int main(int args, char* argv[]) { void *ext_library; double value=0; double (*powerfunc)(double x); ext_library = dlopen("/root/Pro/libpowers.so",RTLD_LAZY); if (!ext_library) { fprintf(stderr, "dlopen() error: %s/n", dlerror()); return 1; }; powerfunc = dlsym(ext_library, argv[1]); value = 3.0; cout << argv[1] << value << (*powerfunc)(value); dlclose(ext_library); } Вот такая прога при компиляции выбрасывает вот это : [root@localhost Pro]# gcc main.cpp -o main -ldl -lstdc++ main.cpp: In function `int main (int, char **)': main.cpp:15: cannot convert `void *' to `double (*) (double)' in assignment Пожалуйста помогите !!! |
Цитата:
Цитата:
и еще Цитата:
|
А как переписать программу ?
|
Nigon
Цитата:
powerfunc = (double (*) (double)) dlsym(ext_library, argv[1]); Добавлено: Я бы ещё на нуль проверил. Вдруг такой функции в разделяемой библиотеке нет... И еще надо быть уверенным, что, если функция есть, она принимает один параметр заданного типа и возвращает данные типа, который нужен. Добавлено: Допустим в /root/Pro/libpowers.so есть три функции: double first(double x); int second(double x); double third(double x, double y); Тогда myprog first - сработает. myprog second и myprog third - рухнут, second вернёт не то, что мы ждем (да и механизм возврата значений типов int и double разный), а third сама ждёт, что ей два параметра передадут, а мы только один пытаемся подсунуть (проблемы со стеком). Ну, а myprog fourth - вообще облом, ну нету там такой функции, а мы её вызываем... |
shurikan
Я вставил (double (*) (double)) --- НЕ ВЫШЛО :( :( :( Теперь пишет следуюшие: [root@localhost les8]# gcc main.cpp -o main -ldl main.cpp: In function `int main (int, char **)': main.cpp:9: cannot convert `double (*) (double)' to `void *' in assignment main.cpp:15: cannot convert `void *' to `double (*) (double)' in assignment И еще, вот содержание библиотеки libpowers.so: double power2(double x) { return x*x; }; double power3(double x) { return x*x*x; }; double power4(double x) { return power2(x)*power2(x); }; |
Ну что ? Неужели нихто не знает ?
|
Nigon
Извини, долго не было на месте, командировка, млин... Цитата:
Добавлено: Цитата:
|
shurikan
УРААААААААААААААААААААА !!! ПОШЛО !!! *:up: :) :biglaugh: :) :biglaugh: БОЛЬШОЕ ТЕ СИШНОЕ И ЛИНУКСОИДНОЕ СПАСИБО :biglaugh: :) :biglaugh: :) :oszone: :oszone: :oszone: :oszone: :oszone: :oszone: :oszone: * |
Время: 15:34. |
Время: 15:34.
© OSzone.net 2001-