Oracle® Developer Studio 12.5:C++ 用户指南

退出打印视图

更新时间: 2016 年 7 月
 
 

12.1 STLport

如果要使用 libCstd 的替代标准库,可以使用标准库的 STLport 实现。 可以使用以下编译器选项关闭 libCstd 并改用 STLport 库:

  • -library=stlport4

有关更多信息,请参见–library=l[,l...]

本发行版包括称为 libstlport.a 的静态归档文件和称为 libstlport.so 的动态库。

在决定使用 STLport 实现之前,请考虑以下信息:

  • STLport 是开放源代码产品,并不能保证不同发行版本之间的兼容性。换而言之,使用 STLport 的将来版本进行编译可能会破坏使用 STLport 4.5.3 编译的应用程序。它还可能无法将使用 STLport 4.5.3 编译的二进制文件与使用 STLport 的将来版本编译的二进制文件链接在一起。

  • stlport4iostream 库都提供了自己的 I/O 流实现。如果使用 -library 选项指定其中多个库,会导致出现不确定的程序行为。

  • 编译器的后续发行版本可能不包括 STLport4,只包括更新版本的 STLport。在将来发行版中可能不能使用编译器选项 -library=stlport4,但可能会用引用更高 STLport 版本的选项替换该选项。

  • Tools.h++ 不支持 STLport。

  • STLport 未提供对语言环境的支持,语言环境用于文本 I/O 的国际化和本地化。

  • STLport 与缺省的 libCstd 是二进制不兼容的。如果使用标准库的 STLport 实现,则必须使用选项 -library=stlport4 编译和链接包括第三方库在内的所有文件。这意味着存在一些限制,例如,不可同时使用 STLport 实现和 C++ 区间数学库 libCsunimath。这是因为对 libCsunimath 编译时使用的是缺省的库头文件而不是 STLport。

  • 如果决定使用 STLport 实现,那么一定要包括代码隐式引用的头文件。允许标准头文件,但不必要包括另一个标准头文件作为实现的一部分。与其他实现相比,STLport 往往具有较少的彼此包含的头实例。

因为以下测试示例中的代码将库实现假定为不可移植,所以在该测试示例中不能使用 STLport 编译。具体来说,它假定 <vector><iostream> 自动包含 <iterator>,这是无效假定。

#include <vector>
#include <iostream>

using namespace std;

int main ()
{
    vector <int> v1 (10);
    vector <int> v3 (v1.size());
    for (int i = 0; i < v1.size (); i++)
      {v1[i] = i; v3[i] = i;}
    vector <int> v2(v1.size ());
    copy_backward (v1.begin (), v1.end (), v2.end ());
    ostream_iterator<int> iter (cout, " ");
    copy (v2.begin (), v2.end (), iter);
    cout << endl;
    return 0;
}

要解决该问题,请将 <iterator> 包含在源代码中。

12.1.1 重新分发和支持的 STLport 库

请参见分发自述文件,了解可依照“最终用户对象代码许可协议”的条款随您的可执行文件或库重新分发的库和对象文件列表。 此自述文件的 C++ 部分列出该编译器发行版支持的 STLport.so 版本。此自述文件位于此发行版的 Oracle Developer Studio 软件的法律页面上,网址为 http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.htmlhttp://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html