首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C共享库- dlopen、dlsym

C共享库- dlopen、dlsym
EN

Stack Overflow用户
提问于 2014-01-02 22:14:33
回答 3查看 1.7K关注 0票数 0

对于一个研究主题,我使用C++程序将SQL查询转换为C++程序。翻译后,c++查询源代码被编译到一个共享库中:

代码语言:javascript
复制
g++ -O0 -g3 -fPIC -std=c++0x GeneratedQuery.cpp ../type/Types.cpp -shared -o lib.so

一切工作正常,库也被正确编译。在第二个程序中,我尝试实现一个read-eval-print-loop循环,它接收来自用户的查询,转换并编译它,用dlopen和dlsym加载共享库,最后执行它。在我在查询代码中使用英特尔TBB之前,一切正常,但现在我输入的第二个查询出现分段错误(第一个查询工作正常,但加载到循环中的第二个查询失败)。

源(读取-求值-打印-循环):http://pastebin.com/pWkRN7Dx

示例查询-代码:http://pastebin.com/A1pBZC3d

如果我的查询中没有连接,因此查询源代码中只有一个parallel_for,那么就不会有问题。但是如果有多个parallel_fors,我会在输入的第二个查询中得到一个分段错误(编译成功,dlopen工作,但dlsym失败)。

以下是gdb的输出

代码语言:javascript
复制
0x00007ffff7de394b in ?? () from /lib64/ld-linux-x86-64.so.2
0x00007ffff7de429e in ?? () from /lib64/ld-linux-x86-64.so.2
0x00007ffff7de4523 in ?? () from /lib64/ld-linux-x86-64.so.2
0x00007ffff6cc612a in ?? () from /lib/x86_64-linux-gnu/libc.so.6
0x00007ffff7bd7044 in ?? () from /lib/x86_64-linux-gnu/libdl.so.2
0x00007ffff7de9176 in ?? () from /lib64/ld-linux-x86-64.so.2
0x00007ffff7bd752f in ?? () from /lib/x86_64-linux-gnu/libdl.so.2
0x00007ffff7bd709a in dlsym () from /lib/x86_64-linux-gnu/libdl.so.2
0x000000000041fd58 in main (argc=1, argv=0x7fffffffe1d8) at ../src/tpcc.cpp:141

我真的不明白第二个查询的失败之处。我为dlopen尝试了不同的标志,但对于任何组合都不起作用。

希望有人能帮助我,因为我在共享库方面非常缺乏经验。

问候

EN

回答 3

Stack Overflow用户

发布于 2014-01-02 22:48:52

尝试替换

代码语言:javascript
复制
extern "C" { void run { ... } }

代码语言:javascript
复制
extern "C" void run { ... }

请参阅优秀的http://www.isotton.com/devel/docs/C++-dlopen-mini-HOWTO/C++-dlopen-mini-HOWTO.html论文中的解释。

票数 3
EN

Stack Overflow用户

发布于 2014-01-03 00:11:06

我真的不确定我所说的是否正确,但我记得去年有一个类似的问题,我在生成包含库的.so时解决了这个问题。如下所示:

g++ -O0 -g3 -fPIC -std=c++0x GeneratedQuery.cpp ../type/Types.cpp {在此处添加英特尔内容.a等} -shared -o lib.so

我使用了CMAKE,并且我不得不添加到add_library的东西中。

我希望这会有帮助,如果不是道歉的话!

票数 1
EN

Stack Overflow用户

发布于 2014-01-03 00:56:55

让它运行起来,但我仍然很困惑:

如果我给每个库文件另起一个名字,比如lib..so并加载它,一切都会正常工作。是否有类似缓存的东西可以导致上面描述的行为?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20884887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档