使用动态加载的类dynamic_cast会导致未定义的引用

dynamic_cast with dynamically loaded class causes undefined reference

提问人:Elektito 提问时间:6/9/2014 最后编辑:Elektito 更新时间:6/9/2014 访问量:699

问:

我有一个 C++ 类,其定义将在运行时通过 加载。不过我无法让它链接。我收到错误,说存在“对 typeinfo 的未定义引用”。dlopen

代码的相关部分如下所示:

class Interface { ... };
class Impl : public Interface { ... };

Interface *Create() { ... }

// Load shared object around here

Impl *impl = dynamic_cast<Impl*>(Create()); // Undefined reference to typeinfo

我尝试添加到我的链接器命令中,但这似乎没有改变任何事情。我能做些什么吗?-rdynamic

由于我看到许多关于未定义的虚函数引起的相同错误消息的问题,我应该提到我确定这不是我的问题

另外,我应该补充一点,我确信这与dynamic_cast有关,因为如果我用正常的强制转换替换dynamic_cast,代码链接就会正确。(Impl*)

C++ 链接器 undefined-reference 动态转换 dlopen

评论

0赞 Kerrek SB 6/9/2014
请出示您的代码。dlopendlsym
0赞 Elektito 6/9/2014
@KerrekSB:这有什么关系?这发生在链接时。
0赞 James Kanze 6/9/2014
@Elektito .so 的链接时间是调用 .如果您在调用(通过)时遇到错误,那么我们需要知道您在那里使用了哪些选项并进行编译。dlopenldg++
0赞 Elektito 6/9/2014
@KerrekSB:调用 ld(通过 g++)时确实会发生错误。传递给 g++ 的选项与库的一些 -l 选项一起出现。我创建了一个最小的测试用例,我正在用一个简单的测试用例编译/链接,但它仍然会导致相同的错误。-Wl,-Bstatic -Wl,-Bdynamicg++ foo.cc

答: 暂无答案