使用动态库的问题

现在我将部分程序做到了动态库里,其它程序用dlopen()打开这个库,然后调用里面的函数,可是有个问题,编译时老是说我在动态库里的函数没有定义,比如我将函数test()做到一个动态库dl.so中,然后其它的程序用dlopen(“dl.so”)打开库,然后调用test(),可是编译这个程序时老是说test()没有定义。

正确的使用方法是:dlopen(“dl.so”); test_func = dlsym(“test”); test_func();

你也可以在链接时就链接 dl.so,这样就用不到 dlopen() 了,缺点是每次你的程序运行,dl.so一定会被装载,否则程序不能运行。

如果函数带参数,怎么用dlsym实现呢?比如test(int d);我用
int d=1;
test_func = dlsym(“test”);
test_func(d);编译不过去

void (*test_func)(int d);

test_func = dlsym(“test”);
test_func(1);