如何在Mac OS X Mavericks上的std C ++库中链接? [英] How to link in std C++ library on Mac OS X Mavericks?

查看:86
本文介绍了如何在Mac OS X Mavericks上的std C ++库中链接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将应用程序移植到OS X Darwin,并且遇到链接错误,缺少符号,例如:

I'm porting an application to OS X Darwin and am getting link errors with missing symbols like:

std::__1::basic_string<char, std::__1::char_traits<char>,
                       std::__1::allocator<char> >::find_last_of(char const*,
                                                                 unsigned long,
                                                                 unsigned long) const
operator delete[](void*)
typeinfo for std::runtime_error
std::set_unexpected(void (*)())
std::exception::~exception()
[...]

我希望它们应该来自libstdc ++,但我看不出如何在使用clang时进行链接。

I expect these should come from libstdc++ but I don't see how to link that in using clang.

这是我尝试的链接线和导致的失败:

Here is my attempted link line and the resulting failure:

clang -std=c++11 -stdlib=libc++ -m64 -o ARCH.darwin_1310_i86/release/myExec ARCH.darwin_1310_i86/release/myExec.o ../../src/netcomm/ARCH.darwin_1310_i86/release/libmyExec.a ../../src/common/ARCH.darwin_1310_i86/release/libcommon.a -L../zlib  -lz -L../Botan -lbotan-1.10 -lboost_thread-mt
Undefined symbols for architecture x86_64:
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find_last_of(char const*, unsigned long, unsigned long) const", referenced from:
[...]

但是这没有用,我没有找到任何如何正确链接的示例。

But this did not work, I'm not finding any examples of how to link it in correctly.

推荐答案

您需要将 -lc ++ 添加到链接行,如下所示:

You need to add -lc++ to the link line like this:


clang -std = c ++ 11 -stdlib = libc ++ -lc ++ -m64 -o ARCH.darwin_1310_i86 / release / myExec ARCH.darwin_1310_i86 / release / myExec.o ../../src/netcomm/ARCH。 darwin_1310_i86 / release / libmyExec.a ../../src/common/ARCH.darwin_1310_i86/release/libcommon.a -L ../ zlib -lz -L ../ Botan -lbotan-1.10 -lboost_thread-mt

clang -std=c++11 -stdlib=libc++ -lc++ -m64 -o ARCH.darwin_1310_i86/release/myExec ARCH.darwin_1310_i86/release/myExec.o ../../src/netcomm/ARCH.darwin_1310_i86/release/libmyExec.a ../../src/common/ARCH.darwin_1310_i86/release/libcommon.a -L../zlib -lz -L../Botan -lbotan-1.10 -lboost_thread-mt

添加之后,缺少的符号消失。

After adding that, the missing symbols go away.

这篇关于如何在Mac OS X Mavericks上的std C ++库中链接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆