nixp.ru v3.0

20 октября 2017,
пятница,
01:01:06 MSK

DevOps с компанией «Флант»
Buggy написал 14 мая 2004 года в 23:17 (511 просмотр) Ведет себя неопределенно; открыл 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*)'

myst

Убери приведение типа в правой части выражения.

Uncle Theodore

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