TAOのビルドオプション設定を解析していると、コンパイラバージョンを判定してSTLportを使用するオプションを設定している記述がありました。
調べてみると、SunStudio C++コンパイラは2つのC++標準クラスライブラリを提供しています。
- libCstd
- libstlport4
デフォルトでは1.が使用されますが、これはC++標準規格への適合性が劣っているため、よりC++標準規格への適合性が高いSTLportのライブラリに切り換えることができます。その際コンパイルオプションとして-library=stlport4を指定します。
TAOやBoostでは、Sunの純正C++標準ライブラリは壊れているのでSTLportを使うようにしています。
SunStudio11でTAOをビルドする際にSTLportを使用する
ACE-5.5/TAO-1.5に添付されているSunStudio C++コンパイラ用のMakefile共通設定において、STLportの利用を設定している箇所を抜粋します。
- platform_sunos5_sunc++.GNUの中の記述
ifeq (C++ 5.6,$(findstring C++ 5.6,$(CC_VERSION)) PLATFORM_STLPORT_CPPFLAGS = -library=stlport4 else ifeq (C++ 5.7,$(findstring C++ 5.7,$(CC_VERSION)) PLATFORM_STLPORT_CPPFLAGS = -library=stlport4 endif endif
- wrapper_macros.GNUの中の記述
stlport ?= 0 ifeq ($(stlport),1) CPPFLAGS += -DACE_HAS_STLPORT $(PLATFORM_STLPORT_CPPFLAGS) LDFLAGS += $(PLATFORM_STLPORT_LDFLAGS) LIBS += $(PLATFORM_STLPORT_LIBS) endif
SunのC++コンパイラのバージョンは、5.6がSunSudio9、5.7がSunStudio10に含まれるものです。SunStudio11に含まれるC++コンパイラのバージョンは5.8です。したがって、上記設定ではSunStudio11ではstlport=1を指定しても、STLportライブラリが使用されないことになります。
そこで、回避策としてplatform_macros.GNUに以下の記述を追加します。
PLATFORM_STLPORT_CPPFLAGS = -library=stlport4