Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用c+编译共享库(旧标准)+;11共享图书馆_C++_C++11_Shared Libraries_Libraries_.so - Fatal编程技术网

C++ 用c+编译共享库(旧标准)+;11共享图书馆

C++ 用c+编译共享库(旧标准)+;11共享图书馆,c++,c++11,shared-libraries,libraries,.so,C++,C++11,Shared Libraries,Libraries,.so,我正在尝试编译一个使用另一个共享库(B)的共享库(a) 必须在不向g++添加-std=c++11选项的情况下编译A库(因为有大量的代码,而且像std::make_pair这样的东西在'11标准中不起作用) 要使用B库,第一个库只需在其中一个文件中包含“B.h”,然后使用-I/path/inc-L/path/lib-lB进行编译 库B由名称空间B中的一组函数组成,并在其自己的名称空间(B::Internal)中包含一些类定义。函数和类之间的关系是全局范围内的静态指针,用\uuuu属性(构造函数))

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

必须在不向g++添加
-std=c++11
选项的情况下编译A库(因为有大量的代码,而且像
std::make_pair
这样的东西在'11标准中不起作用)

要使用B库,第一个库只需在其中一个文件中包含“B.h”,然后使用
-I/path/inc-L/path/lib-lB
进行编译

库B由
名称空间B
中的一组函数组成,并在其自己的名称空间(B::Internal)中包含一些类定义。函数和类之间的关系是全局范围内的静态指针,用
\uuuu属性(构造函数))
初始化

问题是这个类(B::Internal::classB)定义了一些
std::mutex
私有属性,并且遵循include的链: libA->libB->
B::internal
->
std::mutex
,, 当编译libA而不使用
-std=c++11
时,标准编译失败


但是,libA从不使用
B::internal
,所以混合使用这两个库应该不会有问题。另外,如果c++11特性是私有属性,为什么它们没有隐藏到libA?。是否有一些隐藏模式<代码> B::内部结构< /代码>到LIBA?< /P> < P>有一个C++习语用于隐藏实现细节。

另外,不同的C++选项编译的库在其接口中不能公开任何 STD< /Cord>容器,因为它们的布局在不同的C++版本中是不同的。有没有像#ifdef这样的技巧来实现这一点,或者piplm是业界事实上的标准?@marolafm如何公开API(C风格函数、接口+工厂函数、Pimpl)取决于您,但是,实现细节不应该出现在标题中。