Linux下创建和调用动态链接库(.so)相关问题。高手进!

friday5pm friday5pm 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
简单开始提问:
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));

hxhsea168

linux下生成和调用SO库文件的程序示例

这是个LINUX下生成SO文件,和调用SO库的程序示例.

junze_tianjian

linux创建和使用动态链接库.so文件

linux创建和使用动态链接库.so文件

sikao521

linux Qt 生成so库,与调用so库实例

创建步聚:创建项目-》先lib选项,一直Next,根据实例写库,构建生成.so库。 调用:右键添加外部库-》修改pro文件-》添加头文件-》创建对象-》调用应库函数。

没用的阿_吉

so编写和Python调用.so文件

里面有详细教程和编程实例,指导你如何如何在liunx下编写.so文编并通过python调用,里面涉及到了c++和python的混合编程,简单易学,适合入门者学习!

zouroot
评论 11
收藏 已收藏
分享
返回顶部
friday5pm
Linux/Unix社区 23,224 成员 74,535 内容