C ++与静态lib中的std :: string相关的未定义符号

时间:2017-02-19 03:51:45

标签: c++ linux symbols static-linking alembic

我正在通过在Linux上用C ++将一堆代码与静态库(.a)相链接来构建一个共享库。我有一个静态库中定义的方法。当我使用nm -C打印符号时,静态库显示为:

 Alembic::AbcCoreFactory::v9::IFactory::getArchive(std::string const&, Alembic::AbcCoreFactory::v9::IFactory::CoreType&)

符号未在输出.so文件(我正在构建的库)中定义,但是当我使用nm -uC列出未定义的符号时,它会打印:

Alembic::AbcCoreFactory::v9::IFactory::getArchive(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, Alembic::AbcCoreFactory::v9::IFactory::CoreType&)

区别在于第一次使用std :: string const&amp;第二个使用std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;常量和放大器;

我试图理解为什么它没有找到符号。两者不应该匹配,因为它们基本相同吗?

对于上下文,我正在尝试编译一个Alembic Importer,它随附了Unreal Editor 4 for linux。我试图链接的库是alembic库。

1 个答案:

答案 0 :(得分:4)

您正在尝试链接针对 class StoreRequest extends Request { public function authorize(){ return true; } public function rules(){ return [ 'type_id' => 'required|integer', 'external_id' => 'required_if:type_id|in:3|integer', ]; } } (clang的标准C ++库)编译的代码和针对libc++编译的代码(gcc的标准C ++库)。这不会太好用。

检查您的图书馆。

在我的系统上:

libstdc++

在您的系统上,文件可能位于不同的位置,但结果应该是相同的。