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

时间:2017-02-16 15:42:26

标签: c++ c++11 shared-libraries libraries .so

我正在尝试编译使用另一个共享库(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)中包含一些类定义。函数和类之间的关系是全局范围内的静态指针,用__attribute__((constructor))初始化。

问题是这个类(B :: internals :: classB)定义了一些std::mutex私有属性,并且遵循include链: libA - > libB - > B::internals - > std::mutex, 在没有-std=c++11标准编译的情况下编译libA时失败。

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

1 个答案:

答案 0 :(得分:1)

有一个C ++习惯用法隐藏了名为Pimpl的实现细节。

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