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
相关推荐
Linux下 Qt创建.so与调用
创建.so: 新建一个Qt Creator项目(这里使用QT5.4.2),Libraries -> C++ Library,类型为Shared Library,一路Next,选取模块的时候按需要选择,默认仅选择QtCore模块(如果你要包含UI,必须选择QtGui),我创建的项目名为make_so。 双击打开项目的plugintest_global.h文件,我加入了一行:#include ,在make_so.h中加公共函数声明:int add(int a,int b); cpp中添加:int Make_so::add(int a,int b)函数,然后构建,生成:make_so.h、make_so_global.h、libmake_so.so、libmake_so.so.1、ibmake_so.so.1.0、ibmake_so.so.1.0.0 调用.so: 新建工程 test_so 在工程->右键->Addlibray->external library->next->选择.so目录 platform下选择linux 就行,其他不选 next->完成 在 Test_SO.cpp 文件中添加 make_so.h 在调用外部函数到地方使用如下 Make_so TestAdd; int a = TestAdd.add(2,3); QMessageBox::about(this,tr("提示信息"),QString::number (a,10));
linux下生成和调用SO库文件的程序示例
这是个LINUX下生成SO文件,和调用SO库的程序示例.
linux创建和使用动态链接库.so文件
linux创建和使用动态链接库.so文件
linux Qt 生成so库,与调用so库实例
创建步聚:创建项目-》先lib选项,一直Next,根据实例写库,构建生成.so库。 调用:右键添加外部库-》修改pro文件-》添加头文件-》创建对象-》调用应库函数。
so编写和Python调用.so文件
里面有详细教程和编程实例,指导你如何如何在liunx下编写.so文编并通过python调用,里面涉及到了c++和python的混合编程,简单易学,适合入门者学习!


