0

我正在尝试编译一个使用 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 有关,因为我__dynamic_cast在规范中看到了原型。我希望第libsupc++一个构建选项能够在没有此类问题的情况下工作......并且尝试在 linux 上编译 libc++abi本身就是另一个问题

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

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

4

1 回答 1

1

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

于 2013-04-29T08:21:13.257 回答