在 Ubuntu 上使用 libc++ 对"__dynamic_cast"的未定义引用
undefined reference to `__dynamic_cast' using libc++ on ubuntu
我正在尝试使用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上的使用也很成功。
相关文章:
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++Cast运算符过载
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- C++类中的二维"dynamic"数组?
- 错误:"cast"未命名类型void setCastDescription(std::string
- 通过使用 const-cast 的非常量引用来延长临时的寿命
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- protobuf in C++ with dynamic binding for google::protobuf::M
- 警告的原因是什么:"when type is in parentheses, array cannot have dynamic size"?
- C++:"Expected '(' for function-style cast or type construction"错误
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- CUDA 错误:"dynamic initialization is not supported for __device__, __constant__ and __shared__ variabl
- Gtk+ g_signal_connect() 和 C++ lambda 会导致"invalid cast"错误
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- Shared_ptr cast vs static_cast speed
- 在 iOS 上使用 Aruco 构建 OpenCV 时"Functional-style cast from id to double is not allowed"
- "The ordinal 344 could not be located in the dynamic link library"
- 覆盖 CAST 运算符(我认为它被称为向下转换)
- Dynamic Cast C++ Fail
- dynamic-cast-c++dynamic_cast错误处理