在 Ubuntu 上使用 libc++ 对"__dynamic_cast"的未定义引用

undefined reference to `__dynamic_cast' using libc++ on ubuntu

本文关键字:dynamic cast 引用 未定义 Ubuntu libc++      更新时间:2023-10-16

我正在尝试使用libc++编译一个使用dynamic_cast的测试用例,该用例是根据"使用CMake和libsupc++"构建在Linux上"编译的。

#include <iostream>
struct A
{
    virtual void f(){ std::cout << "Virtual A" << std::endl; }
    virtual ~A(){}
};
struct B : public A
{
    void f() { std::cout << "Virtual B" << std::endl; }
    virtual ~B(){}
};
int main()
{
    A *a = new B;
    B *b = dynamic_cast<B *>(a);
    delete a;
}

我是在ubuntu 13.04和clang++ -std=c++11 -stdlib=libc++编译。

为什么我得到undefined reference to '__dynamic_cast' ?如何解决?

编辑

看起来它与libc++abi有关,因为我在规范中看到了__dynamic_cast原型。我希望libsupc++第一个构建选项能够在没有这些问题的情况下工作…在Linux上编译libc++abi本身就是另一个问题了。

这似乎与使用Libc++未定义引用编译Clang有关。

如果这确实是问题所在,是否有一个直接的过程可以在linux上使用libc++来编译这个简短的代码片段,或者它只是还不支持?

我建议使用libcxxrt来取代漂亮的Mac特定libc++abi(网站说只支持达尔文)。它为BSD的Clang+libc++设置提供了一个工作实现,我相信它在Linux上的使用也很成功。