【发布时间】:2017-07-08 11:39:32
【问题描述】:
我通过在 C++ 中的 Linux 上将一堆代码与静态库 (.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& 而第二次使用 std::__1::basic_string, std::__1::allocator > const&
我试图理解为什么它没有找到符号。两者本质上是一样的,不应该匹配吗?
就上下文而言,我正在尝试编译随 Unreal Editor 4 for linux 一起提供的 Alembic 导入器。我试图链接的库是 alembic 库。
【问题讨论】:
-
您的问题不清楚。 “我将静态库(.a)链接到 Linux 上的共享库(.so)”是什么意思。您是否正在获取现有的 .a 文件并将其重新链接到 .so 文件。您是否将 .a 文件与现有 .so 文件链接。如果您正在“链接静态库”文件,那么“输出 .so 文件”是从哪里来的,突然之间。你需要让你的问题更清楚。
-
可以是 libstdc++ vs libc++ 之类的吗?就像在构建 .a 时使用
-stdlib=libstdc++而在构建 .so 时使用-stdlib=libc++一样,反之亦然? -
感谢您的回复。我正在为虚幻编辑器创建一个插件,它是一个共享库(最终输出 .so)。该共享库依赖于静态库。所以我正在从一堆代码和一个现有的 .a 文件中创建一个新的 .so 。
-
@paul 也许吧?能详细点吗?
-
@Paul:好点子。 OP 应该这样读:stackoverflow.com/questions/8454329/… - __1 是相关的。
标签: c++ linux symbols static-linking alembic