使用 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++ 版本中是不同的。
我正在尝试编译使用另一个共享库 (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++ 版本中是不同的。