Buggy
написал 14 мая 2004 года в 23:17 (1100 просмотров)
Ведет себя
неопределенно; открыл 5 тем в форуме, оставил 4 комментария на сайте.
Написал so файл, обьявил в ней функцию int print(char *buffer)
Теперь пишу программу загрузки динамической библиотеки.
#include
#include
#include
int main()
{
void* handle = dlopen(«dll.so»,RTLD_LAZY);
if(handle == NULL)
printf(«Error dlopen dll.so! => %s\n», dlerror());
void (*test) (char*) = (void*)dlsym (handle,«print»); // <= здесь ошибка!!!!!!
if(test == NULL)
printf(«Error dlsym handle from dll.so! => %s\n», dlerror());
(*test) («HELLO WORLD!»);
dlclose(handle);
return 0;
}
Выводит мне ошибку в помеченной выше строке:
invalid conversion from 'void*' to 'void (*)(char*)'
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Убери приведение типа в правой части выражения.
1. Твоя прога на чистом С, не на С++ (это важно), правильно?
2. Попробуй такую фишку:
Вместо
void (*test) (char*) = (void*)dlsym (handle,«print»);
и
(*test) («HELLO WORLD!»);
пишем
typedef void (*test_type) (char *);
test_type test = (test_type)dlsym(handle, «print»);
и далее
test(«HELLO, WORLD!\n»);
Должно сработать. Если же ты пишешь на С++, не забудь extern «C» в нужных местах.
Good Luck,
UT