使用 C++11 共享库编译共享库(旧标准)

compiling shared library (old standard) with c++11 shared library

我正在尝试编译使用另一个共享库 (B) 的共享库 (A)。

必须在不向 g++ 添加 -std=c++11 选项的情况下编译 A 库(因为有大量代码,并且 std::make_pair 之类的某些内容不适用于 '11 标准)。

使用B库,第一个只#include "B.h"在它的一个文件中,然后用-I/path/inc -L/path/lib -lB编译。

库 B 由 namespace B 中的一组函数组成,并在其自己的命名空间 (B::internals) 中包含一些 classes 定义。函数和 class 之间的关系是全局范围内的静态指针,用 __attribute__((constructor)).

初始化

问题在于此 class (B::internals::classB) 定义了一些 std::mutex 私有属性,并且遵循包含链: libA -> libB -> B::internals -> std::mutex, 使得在没有 -std=c++11 标准编译的情况下编译 libA 时会失败。

但是,libA 从不使用 B::internals,因此混合使用这两个库应该不是问题。此外,如果 c++11 功能是私有属性,为什么它们不隐藏到 libA?。是否有一些隐藏 B::internals 到 libA 的模式?

有一个用于隐藏实现细节的 C++ 习惯用法,称为 Pimpl

此外,使用不同的 C++ 选项编译的库不得在其界面中公开任何 std 容器,因为它们的布局在不同的 C++ 版本中是不同的。