对__dynamic_cast'的未定义引用在ubuntu上使用libc ++

时间:2013-04-29 05:50:14

标签: c++ linux linker clang libc++

我正在尝试使用libc ++编译一个使用dynamic_cast的测试用例,这是根据"Build on Linux using CMake and libsupc++"编译的。

#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 since I'm seeing __dynamic_cast prototype in the spec有关。我希望libsupc++第一个构建选项能够在没有这些问题的情况下工作......并尝试在linux is another issue itself上编译libc ++ abi。

这似乎与Compiling with Clang using Libc++ undefined references有关。

如果确实存在这个问题,那么在Linux上使用libc ++是否有一个简单的过程可以编译这个简短的代码片段,或者它是否还不支持?

1 个答案:

答案 0 :(得分:1)

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