我想編譯使用另一個共享庫(B)的共享庫(A)。編譯共享庫(舊標準)與C++ 11共享庫
A庫不必爲g ++添加-std=c++11
選項而編譯(因爲有大量的代碼,並且有些東西如std::make_pair
不能用'11標準)。
對於使用B庫,第一個僅在其文件之一#include "B.h"
,然後與-I/path/inc -L/path/lib -lB
編譯。
庫B由namespace B
中的一組函數構成,並在其自己的名稱空間(B :: internals)中包含一些類定義。函數和類之間的關係是全局範圍內的靜態指針,用__attribute__((constructor))
進行初始化。
的問題是,這種類(B ::內部:: CLASSB)定義了一些std::mutex
私有屬性,並且,所述包含的鏈以下: LIBA - > libB - >B::internals
- >std::mutex
, 使得在編譯時利巴沒有-std=c++11
標準編譯失敗。
但是,libA從來沒有使用B::internals
,所以它不應該是混合這兩個庫的問題。另外,如果C++ 11功能是私有屬性,爲什麼它們不會隱藏到libA中?是否有一些圖案用於隱藏B::internals
以libA?
那麼,有兩個頭,一個用於鏈接libA,另一個用於編譯libB呢?是否有一些像#ifdef這樣的技巧,或者是piplm在行業中事實上的標準? – marolafm
@marolafm你應該如何公開API(C風格的函數,接口+工廠函數,Pimpl),但是實現細節不應該出現在頭文件中。 –