Linux下创建和调用动态链接库(.so)相关问题。高手进!
简单开始提问:
1.生成.so时候 -fpic 的作用和必要性?我加上和去掉在隐式调用下没有区别
2. z=(double (*)(double,double))dlsym((char *)dp,"pow"); //pow函数
可以调用成功。
这个和网上到处搜索到的
pStrlenFun = dlsym(pdlHandle, "Strlen");
是不一样的。
网上的这样调用会出错。为什么都还这么写?是不是编译器,平台之类不同???
3.
double GetTest(double asin)
{
return asin/2;
}
这样编译生成的.so可以隐式调用成功,但是显示调用不行,可以dlopen,但是dlsym error:undefined symbol: GetTest
这是什么原因?
但是调用系统提供的pow可以成功编译。(man 里面提供的cos雷同例子)
4.如何正确的编写.so文件?(网上搜来搜去就那几种,无法正确编译成功。连dlsym我都是搞了好久才搞对。)
dlopen都没有报错,就是dlsym的时候有问题,undefined symbol
以下是我编译的时候的参数:
g++ test1.cpp -shared -o test1.so
g++ -rdynamic -o myso myso.cpp test1.so -ldl