精华内容
下载资源
问答
  • stlport 5.2.1

    2018-04-07 10:58:39
    stlport SGLSTL STL 源码剖析 侯捷 C++ 5.2.1stlport SGLSTL STL 源码剖析 侯捷 C++ 5.2.1
  • STLport

    2015-08-17 13:10:17
    #STLport安装指南 分类: C/C++ 2012-10-12 10:20 1729人阅读 评论(0) 收藏 举报 compilerlibrary编译器iostreamexceptionmakefile STLport安装指南 STLport-4.6 是完全兼容ANSI C++标准的类库。This ...

    #STLport安装指南
    分类: C/C++ 2012-10-12 10:20 1729人阅读 评论(0) 收藏 举报
    compilerlibrary编译器iostreamexceptionmakefile
    STLport安装指南
    STLport-4.6 是完全兼容ANSI C++标准的类库。

    This distribution contains STLport sources only, no binaries.
    To use STLport iostreams, you have to build STLport library from sources in “src”
    directory and link your programs with it.
    这个发布包仅仅包括STLport源代码马,不含二进制发布软件包。必须重新编译src目录下的代码才可以使用STLport iostreams类库。
    This is major change since pre-4.0 releases, please read the instructions carefully.
    这是自4.0版本发布以来的重要变更版本,请仔细的阅读下面的操作指南。

    ==== Unpacking and installing STLport ==========
    解包和安装STLport

    1) Unpack STLport archive to a directory accessible during compilation.
    NOTE : DO NOT overwrite header files coming with the compiler, even if you made
    a backup - this won’t work ! Most probably, you’ve already unpacked the archive before
    reading this file though ;)
    首先吧STLport安装包解压缩到一个目录。注意:不要覆盖了编译器自带的头文件,即使你已经做了备份,也不要这么做!
    2) Make sure “stlport” directory of this distribution comes before compiler’s one
    in your search path when you compile the project;
    确保stlport目录在编译器自带的头文件搜索路径之前
    Note: for SunPro CC 5.0 and higher, there used to be special directory “stlport/SC5”
    this is now obsolete, please make sure you do not use it anymore.
    注意:对于SunPro CC 5.0或者更高版本,有一个特殊的目录stlport/SC5,这个目录已经背废弃了,请不要再使用这个目录。
    3) Make sure you do not rename this “stlport” subdirectory -
    that may result in compilation errors.
    确保不要修改stlport的子目录名称,否则会导致编译错误
    NOTE : Do NOT attempt to run “configure” ! It is deprecated, moved to safe standalone folder
    and should be used as a helper to create initial config for a new compiler only.
    Your compiler should be recognized by STLport source code with no configuring.
    Please edit appropriate configuration header for your compiler
    directly if you have to make compiler-specific configuration changes.
    注意:不要尝试运行configure命令,该方法已经废弃不用了,已经移到一个安全单独的目录,只能用于作为为新编译器的创建初始配置的辅助手段。您使用的编译器应该能够被STLport的源代码识别,如果需要针对您使用的编译器进行特殊的配置,请直接修改适当的头文件。

    4) Go to “src” subdirectory. It contains various makefiles for different
    compilers. If you are not able to find makefile for your particular
    compiler, please use one that looks most similar to your make engine to
    create your own.
    直接进入src目录,这个目录包含了各种不同编译器使用的make文件,请选择一个和你的编译器相似的make文件。
    Verify you can do command line compiles. IDE users may have to do something
    special, like add environment variables (for Microsoft) or install
    additional compiler components (for Metrowerks), before they can use their
    command line compilers.
    必须在命令行方式编译,使用IDE编译需要设置一些环境变量(微软)或者安装特殊的编译组件(Metrowerks)。
    IMPORTANT :

    If you DO NOT plan to use STLport iostreams implementation, you do not have to build the library.
    Please do this instead :
    如果你不需要使用STLport iostream类库,你不必编译整个类库,请使用下面的方法
    4-1) Using appropriate makefile, do “make -f .mak prepare”.
    Please do not skip this! On some platforms, it creates necessary symbolic links.
    If you do build STLport iostream, this step is performed automatically when you do “make all”.
    使用适当的make文件,执行“make -f .mak prepare”命令,不要跳过这步!在一些平台上,它创建了一些符号链接。在需要编译STLport库时,这个步骤是由“make all”自动完成的
    4-2) uncomment _STLP_NO_OWN_IOSTREAMS setting in “stlport/stl_user_config.h” to disable use
    of STLport iostreams and to use wrappers around your existing iostreams.
    After disabling STLport iostreams, you will use wrappers around your compiler’s iostreams
    libabry, as in previous STLport releases.
    No binary library for STLport needs to be built in this case.
    Note though :
    - new-style ANSI iostreams may not be available on your system;
    - compiler’s iostreams are most likely slower than STLport version.
    删除stlport/stl_user_config.h文件中_STLP_NO_OWN_IOSTREAMS编译常量的注释禁止使用STLport iostream类库,并且使用已经存在的iostream类库的封装类。在这种情况下不需要重建STLport二进制类库。

    If you have decided to disable STLport iostreams, you may stop reading here.
    如果你已经决定不使用STLport iostream类库,可以不用往下阅读了。

    ==== Building STLport iostreams library ==========

    Below are step-by-step instructions to build STLport streams library:
    下面是一步一步的教你编译STLport stream类库

    5) Using appropriate makefile, do “make clean all” to build the STLport libraries
    (makefiles are set up to build several different flavors - debug/nondebug,
    static/dynamic versions).
    Optionally, do “make install” to copy STLport headers and libraries to shared location.
    选择适当的make文件,执行make clean all编译STLport库,make文件设置了集中不同的编译方式-debug/nondebug和static/dynamic版本。可选的,执行make install拷贝STLport的头文件和库文件到共享的位置。
    Note : your “make” program may have different name, like “nmake” for Visual C++.
    注意:make文件可能有不同的名称,VC使用nmake
    Examples :
    1. If you are building STLport for just one compiler, you may do something like that
    (DOS syntax for Visual C++ below):
    copy vc6.mak makefile
    nmake clean all
    nmake install
    例如:
    1.如果你只是为一种编译器编译STLport,方法如下:
    copy vc6.mak makefile
    nmake clean all
    nmake install

     2. If you plan to build STLport with multiple compilers, use "make -f" :
    

    make -f gcc.mak clean install
    make -f sunpro.mak clean install
    This will build and install STLport for gcc & SUN CC.
    2.为多个编译器编译STLport,使用make –f
    make -f gcc.mak clean install
    make -f sunpro.mak clean install
    这会编译和安装STLport gcc和SUN CC两个版本。

        "install" target works on most platforms.
    

    install编译依赖目标几乎在所有的平台上可以使用。

         On Win32, it does the following :
          - copies STLport headers in "stlport" subdirectory of your compiler's INCLUDE directory;
          - copies STLport .lib files in your compiler's LIB directory;
          - copies STLport DLLs to Windows system directory so they can be found at runtime.
    

    在Win32平台上,install目标做了下面的工作:
    -拷贝STLport的头文件到编译器的INCLUDE目录
    -拷贝STLport.lib到编译器的LIB目录
    -拷贝STLport DLL库到Windows的系统目录

    On UNIX, it does the following :
    - copies STLport headers in “stlport” subdirectory of system’s local include directory (default is /usr/local/include);
    - copies STLport .a and .so files to system local library directory (default is /usr/local/lib);
    在UNIX平台上,它完成了下面的工作
    -拷贝STLport头文件到系统local include目录(默认是/usr/local/include)
    -拷贝STLport.a和.so文件到系统的local库文件目录(默认为/usr/local/lib)
    6) If build fails, you may choose to :
    - try fixing the build ;
    - wait until somebody else will submit corresponding changes to be incorporated in next STLport
    release/snapshot. To use STLport w/o its own iostreams, please do step 3a).

    In case you do patch STLport, please submit your patches tosupport@stlport.com or (better)
    to STLport Forum (http://www.stlport.com/cgi-bin/forum/dcboard.cgi)
    

    如果编译失败,你可以:
    -试着修改相关文件重新编译
    -等待其他人发现同样的问题,这STLport的下个发布中修改
    既然你已经为STLport打了补丁,请把你的补丁发送到support@stlport.com或者(最好使用这种方式)STLport Forum(http://www.stlport.com/cgi-bin/forum/dcboard.cgi)
    7) Do “make install” to install resulting libraries into “./lib” subdirectory.
    执行make install安装编译产生的库到/lib目录

    ==== Linking your application with STLport library ==========
    链接应用程序到STLport库文件
    8) Supply the “lib” subdirectory to the library search path and add desired
    library to the list of libraries to link with.
    把lib目录加入到库文件的搜索路径中并且指定要链接的库名称。
    Examples (imagine you have mytest.cpp in the same directory as this file is):
    With gcc : gcc -I./stlport mytest.cpp -L./lib/ -lstlport_gcc
    With DEC CC : cxx -I./stlport mytest.cpp -L./lib/ -lstlport_deccxx
    With SUN CC : CC -I./stlport mytest.cpp -L./lib/ -lstlport_sunpro
    …..
    例如:
    -gcc,gcc -I./stlport mytest.cpp -L./lib/ -lstlport_gcc
    -DEC CC,cxx -I./stlport mytest.cpp -L./lib/ -lstlport_deccxx
    -SUN CC,CC -I./stlport mytest.cpp -L./lib/ -lstlport_sunpro
    ……
    [ Visual C++ specific ] For VC++, you do not have to specify “stlport-msvc-XXX.lib” explicitly,
    as it is being choosen and forced to link automatically by “#pragma“‘s in stlport/config/stl_select_lib.h.
    Appropriate version is being selected based on /MD[d] vs /MT[d] options and __STL_DEBUG setting.
    All you have to do is to set library search path for the linker.
    Example :
    cl.exe /I./stlport mytest.cpp /link /libpath:./lib /MD
    -VC比较特殊,不需要显式的指定stlport-msvc-XXX.lib库文件,而是在stlport/config/stl_select_lib.h头文件中使用#pragma指令自动选择了链接的库文件。有些版本基于/MD[d] vs /MT[d]编译选项编译,以及设置了__STL_DEBUG编译常量。只需要按照下面的设置即可:
    cl.exe /I./stlport mytest.cpp /link /libpath:./lib /MD

    9) If you linked your application with shared STLport library (.so or .dll), please make your .so or
    .dll’s to be found in PATH at runtime. On Windows, the simplest way to do it
    is to copy all .dll’s to Windows system directory. Or, you might choose to add directory
    containing STLport to the PATH environment string.

    10) Have fun !

    10/31/03, Boris Fomitchev.


    stlport的主页是http://www.stlport.org/,以下讨论都是针对版本5.1.3。

    首先介绍一下关键的目录,假设解压后的目录为stlport-5.1.3。stlport-5.1.3目录下的stlport目录提供了头文件,应用程序必须要将该目录放到头文件包含目录的最前面。stlport-5.1.3目录下的build/lib目录提供了生成不同平台下stlport库的配置文件。比如,在stlport-5.1.3/build/lib目录下运行“make -f gcc.mak dbg-static”即用gcc来编译debug版本的静态库,编译结果为obj/gcc/so_g/libstlportg.a,文件名中的g表示debug版本。

    最终,只需要提供整个stlport-5.1.3/stlport头文件目录和库文件即可。

    其他使用方法略,随便网上找找都可以找到。只需要记得必须将”-I …./stlport/stlprot/”放在编译参数的最前面,尽量将”-L…./libstlport.a”放在链接参数的最后面(如果使用linux的静态库的话),下面主要介绍在linux下的一些特殊用法。

    在linux下,可能会碰到不同系统中libstd++.so的不匹配问题,那么,我们就需要使用静态库。可是,有些时候,libstdc++.a无法满足要求。因此,我们选择使用stlport库和libsupc++.a来共同提供libstdc++.a的功能;某些时候,我们也可以对源代码作些调整,可以只使用stlport静态库(和libc.a),而不包括supc++库。

    以下的描述都是基于当前目录为stlport-5.1.3进行的讨论。

    一.编译器选择
    在build/Makefiles/gmake/gcc.mak文件的开头增加以下设置,即可不使用系统默认编译器。
    CC := 。。。
    CXX := 。。。
    LD := 。。。
    AR := 。。。

    二.编译选项修改
    这里只是一般性的描述,具体描述将在下面结合具体需求进行,但不保证具体例子中编译选项修改的绝对准确,如果有问题,可以在下述文件中自行修改。
    build/lib/gcc.mak
    build/lib/Makefile.inc (这个文件控制需要编译哪些源文件)
    build/Makefiles/gmake/gcc.mak

    一般的,可以在上述文件中增加一些宏定义,用来控制下面的修改启用与否。
    为了达到一些目的,可以在build/Makefiles/gmake/gcc.mak 文件中为CXXFLAGS增加-fno-exceptions -fno-rtti选项。以及­-g或者­-O2等等。

    三.避免使用exit、abort函数
    使用exit、abort等函数会导致系统直接退出,在某些情况下是不允许的。
    3.1 修改stlport/stl/_alloc.h的第55行,将exit退出修改为printf输出。

    ifndef __THROW_BAD_ALLOC

    if !defined(_STLP_USE_EXCEPTIONS)

    ifndef _STLP_INTERNAL_CSTDIO

    include

    endif

    define __THROW_BAD_ALLOC printf(“!!!!out of memory, exit in stlport library\n”)

    else

    define __THROW_BAD_ALLOC throw _STLP_STD::bad_alloc()

    endif

    endif

    3.2 修改stlport/stl/config/features.h文件第203行,将abort退出修改为printf输出

    ifndef _STLP_ABORT

    define _STLP_ABORT() printf(“!!!!!!!!!abort in stlport library”)

    endif

    四.取消使用exception
    在一些底层应用中,不支持使用exception
    4.1 在stlport/stl/_exception.h文件中增加定义:

    define _STLP_NO_UNCAUGHT_EXCEPT_SUPPORT

    4.2 在stlport/stl/config/features.h文件中增加定义:

    define _STLP_HAS_NO_EXCEPTIONS

    define _STLP_DONT_USE_EXCEPTIONS

    define _STLP_NO_EXCEPTION_SPEC

    define _STLP_NO_UNCAUGHT_EXCEPT_SUPPORT

    4.3 修改stlport/stl/­_stdexcept_base.h文件中修改第68行,移除继承的基类_STLP_EXCEPTION_BASE
    class _STLP_CLASS_DECLSPEC __Named_exception {
    否则,当编译不链接stdlibc++库时,会提示找不到std::exception库

    五.移除pthread库
    对单线程的应用,并不需要pthread库,有些时候,也需要移除pthread的影响。
    5.1 在stlport/stl/config/host.h文件第11行附近启用定义:

    define _NOTHREADS

    define _STLP_NO_THREADS

    5.2 在build/Makefiles/gmake/gcc.mak文件中修改编译参数是否有­-pthread/-D_REENTRANT(这两个选项应该或者同时存在,或者同时不存在,记得是这样的吧)

    六.移除local本地化和宽字符
    6.1 修改build/lib/gcc.mak文件,将宏-D_STLP_REAL_LOCALE_IMPLEMENTED调整为-D_STLP_NO_LOCALE_SUPPORT
    6.2 将src/c_locale_glibc/c_locale_glibc2.c文件中的locale相关的字符函数strcoll_l, wcscoll_l换成字符函数strcmp, wcscmp。
    6.3 删除src/iostream.cpp文件第310行开始的被#ifndef _STLP_NO_WCHAR_T包围的代码:
    ptr_wcin->exceptions(0);
    ptr_wcout->exceptions(0);
    ptr_wcerr->exceptions(0);
    ptr_wclog->exceptions(0);
    delete ptr_wcin->rdbuf(0);
    delete ptr_wcout->rdbuf(0);
    delete ptr_wcerr->rdbuf(0);
    delete ptr_wclog->rdbuf(0);
    _Destroy(ptr_wcin);
    _Destroy(ptr_wcout);
    _Destroy(ptr_wcerr);
    _Destroy(ptr_wclog);
    6.4 删除src/iostream.cpp文件第253行开始的被#ifndef _STLP_NO_WCHAR_T包围的代码:
    wistream* ptr_wcin = new(&wcin) wistream(0);
    wostream* ptr_wcout = new(&wcout) wostream(0);
    wostream* ptr_wcerr = new(&wcerr) wostream(0);
    wostream* ptr_wclog = new(&wclog) wostream(0);
    wfilebuf* win = _Stl_create_wfilebuf(stdin, ios_base::in);
    wfilebuf* wout = _Stl_create_wfilebuf(stdout, ios_base::out);
    wfilebuf* werr = _Stl_create_wfilebuf(stderr, ios_base::out);
    wfilebuf* wlog = _Stl_create_wfilebuf(stderr, ios_base::out);
    ptr_wcin->init(win);
    ptr_wcout->init(wout);
    ptr_wcerr->init(werr);
    ptr_wclog->init(wlog);
    ptr_wcin->tie(ptr_wcout);
    ptr_wcerr->setf(ios_base::unitbuf);
    6.5 删除src/locale_impl.cpp文件第617行被#ifndef _STLP_NO_WCHAR_T包围的代码:
    new collate(1),
    new ctype(1),

    ifndef _STLP_NO_MBSTATE_T

    new codecvt<wchar_t, char, mbstate_t>(1),
    

    else

    0,
    

    endif

    new moneypunct<wchar_t, true>(1),
    new moneypunct<wchar_t, false>(1),
    new numpunct<wchar_t>(1),
    new messages<wchar_t>(new _STLP_PRIV _Messages()),
    new money_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
    0,
    new money_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
    0,
    new num_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
    0,
    new num_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
    0,
    new time_get<wchar_t, istreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
    0,
    new time_put<wchar_t, ostreambuf_iterator<wchar_t, char_traits<wchar_t> > >(1),
    0,
    

    七.考虑fpic选项
    在32bit和64bit下,可能会有不同的需求,因此,可以通过修改build/Makefiles/gmake/gcc.mak文件来控制编译选项。

    八.部分模拟libsupc++
    在某些特殊需要的情况下,可以不链接libstdc++库和libsupc++库。
    8.1 在build/lib/Makefile.inc文件中增加编译../../src/supc++.cpp
    8.2 在src目录下新建文件supc++.cpp,其内容如下:

    include

    define USE_SPRINTF_INSTEAD

    10.3 mktime函数,直接删除,改以printf进行输出监视。

    经过以上修改后,最后得到的静态库中将只依赖c库函数和一些math库函数,除此,不再依赖其他函数库,可以解决某些情况下的某些问题。

    展开全文
  • 解决vs2015、vs2012用了stlport无法查看容器内容-附件资源
  • stlport vc10

    2014-09-10 14:16:22
    修改为vs2010编译,最新版,需要的下载哈哈哈
  • STLport-5.2.1

    2015-08-25 11:26:28
    这个是STLport站点上的STL实现版本(5.2.1)。仅供参考
  • C++的stl源代码。
  • STLport-5.2.1及安装方法

    2011-06-13 09:45:03
    stlport 开发包 版本5.2.1 .使用stlport 的朋友可以下载
  • STLPort标准库

    2011-03-27 10:08:18
    STLport 是一个多平台的 ANSI C++ 标准类库实现,具备很多高级特征,并且为效率,异常安全性和线程安全性做了优化,还做了许多扩展
  • STLPort 库文件

    2011-04-10 22:55:07
    STLPort编译后库文件,VC6直接使用
  • STLport-2.033

    2011-07-08 15:13:37
    sgi stl 2.x对应在stlport中版本,可阅读性比较强的版本,只是我还没有想法在vc6中安装,如果有人想到办法了,发个信息给我吧,谢谢了email:417230766@qq.com
  • 每个应用一个 STL 过去,NDK 除了支持 libc++,还支持 GNU libstdc++ 和 STLport。如果应用依赖于预构建库,而构建相应库所使用的 NDK 与构建应用使用的 NDK 不同,需确保其兼容性。 一个应用不得使用多个 C++ 运行...

    转自:https://developer.android.com/ndk/guides/cpp-support?hl=zh-cn

    C++ 库支持

    NDK 支持多种 C++ 运行时库。本文档介绍了这些库的相关信息、所涉及的折衷做法以及库的使用方法。

    C++ 运行时库

    表 1. NDK C++ 运行时和功能。

    名称功能
    libc++现代 C++ 支持。
    systemnew 和 delete。(在 r18 中已弃用。)
    none无头文件,有限 C++。

    libc++ 同时提供静态库和共享库。

    警告:使用静态运行时可能会导致意外行为。如需了解详情,请参阅静态运行时部分

    libc++

    LLVM 的 libc++ 是 C++ 标准库,自 Lollipop 以来 Android 操作系统便一直使用该库,并且从 NDK r18 开始成为 NDK 中唯一可用的 STL。

    注意:如需全面详细了解任何给定版本对 C++ 库的支持级别是否达到了预期,请参阅 C++14 StatusC++17 Status 和 C++2a Status 页面。 请注意,编译器的 C++ 语言支持级别互不相关;请改为参阅 Clang 中的 C++ 支持

    libc++ 的共享库为 libc++_shared.so,静态库为 libc++_static.a

    注意:libc++ 不是系统库。如果使用 libc++_shared.so,必须将其包含在 APK 中。如果使用 Gradle 构建应用,此步骤会自动完成。

    libc++ 依据伊利诺伊大学“BSD 式”许可和 MIT 许可双重授权。如需了解详情,请参阅许可文件

    system

    system 运行时指的是 /system/lib/libstdc++.so。请勿将该库与 GNU 的全功能 libstdc++ 混淆。在 Android 系统中,libstdc++ 只是 new 和 delete。对于全功能 C++ 标准库,请使用 libc++。

    注意:系统 STL 将在未来 NDK 版本中移除。请参阅问题 744

    系统 C++ 运行时支持基础 C++ 运行时 ABI。从根本上来说,此库就是提供 new 和 delete。不同于 NDK 中提供的其他选项,此库不支持异常处理和 RTTI。

    除 <cstdio> 等用于 C 库头文件的 C++ 封装容器之外,并无标准库支持。如需 STL,您应使用本页面提供的其他选项。

    none

    另外,您还可选择不使用 STL。在这种情况下,没有关联或授权要求。不提供 C++ 标准头文件。

    选择 C++ 运行时

    CMake

    CMake 的默认值为 c++_static

    您可以使用模块级 build.gradle 文件中的 ANDROID_STL 变量指定 c++_sharedc++staticnone 或 system。如需了解详情,请参阅有关 CMake 中 ANDROID_STL 的文档。

    ndk-build

    ndk-build 的默认值为 none

    您可以使用 Application.mk 文件中的 APP_STL 变量指定 c++_sharedc++staticnone 或 system。例如:

     

    APP_STL := c++_shared
    

    ndk-build 仅允许为您的应用选择一个运行时,并且只能在 Application.mk 中进行选择。

    直接使用 clang

    如果您在自己的构建系统中直接使用 clang,则 clang++ 将默认使用 c++_shared。如需使用静态变体,请将 -static-libstdc++ 添加至链接器标志中。请注意,尽管由于历史原因该选项使用的名称是“libstdc++”,但也适用于 libc++。

    重要注意事项

    静态运行时

    如果应用的所有原生代码均位于一个共享库中,我们建议使用静态运行时。这样可让链接器最大限度内联和精简未使用的代码,使应用达到最优化状态且文件最小巧。这样做还能避免旧版 Android 中的 PackageManager 和动态链接器出现错误,此类错误可导致处理多个共享库变得困难,且容易出错。

    然而,在 C++ 中,在单一程序中定义多个相同函数或对象的副本并不安全。这是 C++ 标准中提出的单一定义规则的一个方面。

    如果使用静态运行时(以及一般静态库),很容易在不经意间破坏这条规则。例如,以下应用就破坏了这一规则:

     

    # Application.mk
    APP_STL := c++_static
    

     

    # Android.mk
    
    include $(CLEAR_VARS)
    LOCAL_MODULE := foo
    LOCAL_SRC_FILES := foo.cpp
    include $(BUILD_SHARED_LIBRARY)
    
    include $(CLEAR_VARS)
    LOCAL_MODULE := bar
    LOCAL_SRC_FILES := bar.cpp
    LOCAL_SHARED_LIBRARIES := foo
    include $(BUILD_SHARED_LIBRARY)
    

    在这种情况下,包括全局数据和静态构造函数在内的 STL 将同时存在于两个库中。此应用的运行时行为未定义,因此在实际运行过程中,应用会经常崩溃。其他可能存在的问题包括:

    • 内存在一个库中分配,而在另一个库中释放,从而导致内存泄漏或堆损坏。
    • libfoo.so 中引发的异常在 libbar.so 中未被捕获,从而导致应用崩溃。
    • std::cout 的缓冲未正常运行。

    将静态运行时链接至多个库,除了会导致行为问题,还会在每个共享库中复制代码,从而增加应用的大小。

    一般情况下,只有在应用中有且只有一个共享库时,才能使用 C++ 运行时的静态变体。

    注意:此规则既适用于您的代码,也适用于您的第三方依赖项。

    共享运行时

    注意:通过 Java AAR 分发的 JNI 库不得使用共享运行时,以免与其他库和应用发生冲突。以下警告仍然适用。如需了解详情,请参阅中间件供应商文档。

    如果应用包括多个共享库,应使用 libc++_shared.so

    在 Android 系统中,NDK 使用的 libc++ 与操作系统的 libc++ 是不同的。如此一来,即使应用以旧版 Android 为目标平台,NDK 用户也能获得最新的 libc++ 功能和问题修复。需要权衡的是,如果使用 libc++_shared.so,就必须将其包含在您的 APK 中。如果使用 Gradle 构建应用,此步骤会自动完成。

    旧版 Android 的 PackageManager 和动态链接器存在错误,导致原生库的安装、更新和加载不可靠。具体而言,如果应用以早于 Android 4.3(Android API 级别 18)的 Android 版本为目标,并且您使用 libc++_shared.so,必须先加载共享库,再加载依赖于共享库的其他库。

    ReLinker 项目能够解决所有已知的原生库加载问题,而且相较于自行编写解决方法,它通常是更好的选择。

    每个应用一个 STL

    过去,NDK 除了支持 libc++,还支持 GNU libstdc++ 和 STLport。如果应用依赖于预构建库,而构建相应库所使用的 NDK 与构建应用使用的 NDK 不同,需确保其兼容性。

    一个应用不得使用多个 C++ 运行时。不同的 STL 互兼容。举例来说,libc++ 中 std::string 的布局不同于 gnustl。根据某种 STL 编写的代码无法使用以另一种 STL 编写的对象。以上仅举一例,其他不兼容情况不胜枚举。

    注意:此规则的例外情况是,“无 STL”不算 STL。在同一应用中,您可放心地将仅有 C 语言的库(甚或 none 或 system 运行时,因为它们并非实际意义上的 STL)作为 STL 使用。此规则只适用于 libc++、gnustl 和 stlport。

    警告:在构建阶段,链接器可以捕获其中一些问题,但还有许多这类问题只会在运行阶段显现,表现为崩溃或异常行为。

    此规则不仅仅适用于您的代码。您的所有依赖项也必须使用与您所选 STL 相同的 STL。如果您使用闭源第三方依赖项,而该依赖项使用 STL,且不能为每个 STL 分别提供一个库,那么您就无法选择 STL。您必须使用与依赖项相同的 STL。

    您有可能依赖两个互不兼容的库。在这种情况下,您只能弃用其中一个依赖项,或请求维护者提供根据另一个 STL 构建的库。

    注意:虽然我们努力保持 NDK 各个版本 ABI 的兼容性,但这并非总能实现。为了获得最佳的兼容性,您除了要使用与依赖项相同的 STL,还需尽可能使用相同版本的 NDK。

    C++ 异常

    C++ 异常受 libc++ 支持,但其在 ndk-build 中默认为停用状态。这是因为之前 NDK 并不支持 C++ 异常。CMake 和独立工具链默认启用 C++ 异常。

    若要在 ndk-build 中针对整个应用启用异常,请将下面这一行代码添加至 Application.mk 文件:

     

    APP_CPPFLAGS := -fexceptions
    

    若要针对单一 ndk-build 模块启用异常,请将下面这一行代码添加至相应模块的 Android.mk 中:

     

    LOCAL_CPP_FEATURES := exceptions
    

    或者,您可以使用:

     

    LOCAL_CPPFLAGS := -fexceptions
    

    RTTI

    与异常一样,RTTI 也受 libc++ 支持,但在 ndk-build 中默认为停用状态。CMake 和独立工具链默认启用 RTTI。

    若要在 ndk-build 中针对整个应用启用 RTTI,请将下面这一行代码添加至 Application.mk 文件:

     

    APP_CPPFLAGS := -frtti
    

    若要针对单一 ndk-build 模块启用 RTTI,请将下面这行代码添加至相应模块的 Android.mk 中:

     

    LOCAL_CPP_FEATURES := rtti
    

    或者,您可以使用:

     

    LOCAL_CPPFLAGS := -frtti
    展开全文
  • STLport-5.1.0源码

    2011-03-22 19:59:52
    官网地址: http://sourceforge.net/projects/stlport/files/STLport/STLport%205.1.0/STLport-5.1.0.zip
  • 1、具体说明了了编译stlPort5.2.1的步骤、其中存在的问题及解决办法 2、说明了最新的boost_1_53_0配合stlPort5.2.1使用时的编译方法,全部库在win7下都成功编译 3、说明了如何在vc2010下使用编译好的库及配置不...
  • STLport编译

    2013-04-27 18:13:57
    0. 下载STLport-5.2.1.tar.bz2 http://www.stlport.org/ 1.运行:Visual Studio 2008 Command Prompt 2.Configure. F:\source\c_cpp_src\STLport-5.2.1&gt;configure msvc9 STLport Configuration Tool...

    快速:

    0. 下载STLport-5.2.1.tar.bz2
    	http://www.stlport.org/
    
    1.运行:Visual Studio 2008 Command Prompt
    
    2.Configure.
    F:\source\c_cpp_src\STLport-5.2.1>configure msvc9
    STLport Configuration Tool for Windows
    
    Setting compiler: Microsoft Visual C++ 2008
    
    Setting platform: Windows XP
    
    Done configuring STLport.
    
    Go to build/lib folder and type "nmake clean install" to build  and
    install STLport to the "lib" and "bin" folders.
    Go to build/test/unit folder and type nmake clean install to
    build unit tests and install them in bin folder.
    
    
    3. Build
    cd build/lib
    nmake clean install
    
    4. Finished.

     

     INSTALL文件:

    **********************************************************************
    *  INSTALL file for STLport                                         *
    *                                                                    *
    **********************************************************************

    STLport is a full ANSI C++ Standard library.

    This distribution contains STLport sources only, no binaries.
    To use STLport iostreams, locale and complex numbers, you have to build STLport
    library from sources in "build/lib" directory and link your programs with it.

    Starting with 5.0 the 'wrapper' mode is not supported anymore. You cannot use native
    compiler iostreams implementation with STLport STL (see doc/FAQ for explanations).
    Now you have to choose between STLport iostreams or no iostreams.

    ==== Unpacking and installing STLport ==========

    1) Unpack STLport archive to a directory accessible during compilation.
       NOTE: DO NOT overwrite header files coming with the compiler, even if you made
       a backup - this won't work! Most probably, you've already unpacked the archive before
       reading this file though ;)

    2) Make sure "stlport" directory of this distribution comes before compiler's one
       in your include paths when you compile the project.

       Note: for SunPro CC 5.0 and higher, there used to be special directory "stlport/SC5"
      this is now obsolete, please make sure you do not use it anymore.

    3) Make sure you do not rename this "stlport" subdirectory -
       that may result in compilation errors.

       NOTE:  Your compiler should be recognized by STLport source code with no configuring.
              Please edit appropriate configuration header for your compiler
              directly if you have to make compiler-specific configuration changes
              (see stlport/stl/config).

    4)  Run:

        configure --help

        Depending on your environment, Windows command shell or Unix like shell,
        configure.bat or configure script will be run respectively. For Windows users
        running configure script is mandatory in order to declare the compiler you are
        going to use.

    5)  Go to "build/lib" subdirectory. It contains various makefiles for different
        compilers and 'make' utilities (GNU Make and Microsoft's nmake supported).

        Verify you can do command line compiles. IDE users may have to do something
        special, like add environment variables (for Microsoft) or install
        additional compiler components (for Metrowerks), before they can use their
        command line compilers (see doc/README.xxxx for additionnal information).

        configure script should have already created a Makefile file so that you only
        have to call 'make' or 'nmake' (for some platforms GNU make might be hidden
        behind 'gmake').

        IMPORTANT:

        If you DO NOT plan to use STLport iostreams and/or locale implementation but just
        the STL, you do not have to build the library.
     
        If you have decided to disable STLport iostreams and locale using _STLP_NO_IOSTREAMS
        configuration macro in stlport/stl/config/user_config.h, you may stop reading here.


    ==== Building STLport iostreams library ==========

    Below are step-by-step instructions to build STLport streams library. This is a general
    build process description, for a more detailed one check README files in the doc folder:

    5)  Using appropriate make command (make or nmake), do

          make clean install

        to build the STLport libraries. Make files are set up to build several different
        flavors - debug/nondebug, static/dynamic versions. But not all flavors will be build
        by default. See build/lib/README for other make targets.

        Note: 'install' target work slightly different than usual - it installs libraries into
        <STLport root dir>/lib and bin catalogs, NOT IN SYSTEM CATALOG. You can do the system
        install by just copying stlport and lib folder to the destination of your choise. For
        example on UNIX-like platforms this can be done with the following commands:

          su
          tar cf - stlport | (cd /usr/local/include; tar xf -)
          chmod -R a+r /usr/local/include/stlport
          chown -R root:root /usr/local/include/stlport
          (cd lib; tar cf - --exclude=CVS --exclude=.cvsignore .) | (cd /usr/local/lib; tar xf -)
          chown -R root:root /usr/local/lib/libstlport*
          exit

        Note: System install is optional, most of compilers/linkers support searching for includes
        and libs throught out the whole filesystem, just check your documentation on how to achieve
        this.

        If you use cross-compiler, you can find libraries in the <STLport root dir>/lib/<target platform>
        catalog.

    6)  If build fails, you may choose to :
         - try fixing the build ;)
         - wait until somebody else will submit corresponding changes to be incorporated in next STLport
           release/snapshot.

        In case you do patch STLport, please submit your patches to
        https://sourceforge.net/tracker/?atid=766246&group_id=146814&func=browse

    ==== Linking your application with STLport library ==========

    7) Check the build:

        Example:
       
        - under Linux and other Unixes:

        cd build/test/unit
        make install
        ../../../bin/stl_unit_test
        ../../../bin-g/stl_unit_test

        - under Windows:

        cd build\test\unit
        nmake install
        cd ..\..\..\bin
        stl_unit_test
        stl_unit_testd
        stl_unit_teststld

    8) Supply the "lib" subdirectory to the library search path and add desired
       library to the list of libraries to link with.
       Examples (imagine you have mytest.cpp in the same directory as this file is):
     With GCC     : g++ -pthread -I./stlport mytest.cpp -L./lib/ -lstlport
     With DEC CC  : cxx -I./stlport mytest.cpp -L./lib/ -lstlport
     With SUN CC  : CC -mt -I./stlport mytest.cpp -L./lib/ -lstlport
     .....
       For several compilers supporting auto linking feature (VC++, Borland, DMC),
       you do not have to specify "stlport.M.m.lib" explicitly, as it is being choosen
       and forced to link automatically by "#pragma"'s in compiler config files
       Appropriate version is being selected based on compiler options and _STLP_DEBUG
       setting. All you have to do is to set library search path for the linker.

     Example :
               cl.exe /I.\stlport mytest.cpp /link /libpath:.\lib /MD

    9) If you linked your application with shared STLport library (.so or .dll), please
       make suze that your .so or .dll can be found by the dynamic linker.
       Under Windows, the paths searched depend on the particular flavor, see the MSDN
       documentation for LoadLibrary at http://msdn.microsoft.com. The easiest ways are to
       either modify the PATH environment variable or copy all .dll's next to the
       executable like it is done per default when unit tests executable are put next
       to dlls.
       Under Linux, the environment variable LD_LIBRARY_PATH can be adjusted to point
       to the dir containing .so. See the manpage for ld.so for more info.

    10) STLport builds only multithreaded libraries, so your application should be compiled
       as multithreaded, too. Use -pthread (or -pthreads on Solaris) option for GCC, -mt for SunPro,
       /MT for VC, and so on. Sometimes you should define _REENTRANT or something else, depends
       upon platform/compiler. See compiler's and linker's options on command line when you build
       unit tests (build/test/unit) for reference. The last is useful for ANY platform.

    11) Don't hesitate to read READMEs (doc/README*, build/lib/README*, build/test/unit/README*)
       and doc/FAQ.

    12) Have fun!

     

     

    展开全文
  • STLport5.2.1 编译指南

    千次阅读 2016-08-03 11:45:23
    首先下载STLport5.2.1库,STLport...下载解压后,我放置在 D:\libs\STLport-5.2.1 开始编译: 第一步:打开Visual Studio 2008命令提示,输入命令行:cd D:\libs\STLport-5.2.1,如下图所示: 第二步, 输入命

    首先下载STLport5.2.1库,STLport下载地址:https://sourceforge.net/projects/stlport/

    下载解压后,我放置在 D:\libs\STLport-5.2.1


    开始编译:

    第一步,打开Visual Studio 2008命令提示,输入命令行:cd D:\libs\STLport-5.2.1,如下图所示:



    第二步, 输入命令行:configure msvc9,(生成vs08的makefile,如果要用其他的编译器,输入configure --help获取帮助如下图所示:



    第三步,进入到build/lib目录下,输入命令行:cd D:\libs\STLport-5.2.1\build\lib



    第四步,输入命令行:nmake  –f  msvc.mak  clean  install,开始编译STLport5.2.1



    等待编译完成,编译成功后的界面如下图所示:



    编译完成后,在STLPort-5.2.1主目录下面比之前多出了binlib两个文件夹,所有编译产生的*.dll*.lib文件都已经自动复制到了这两个文件夹下面。

    展开全文
  • stlport5.2.1

    2009-01-21 10:52:45
    stlport 开发包 版本5.2.1 .使用stlport 的朋友可以下载
  • VC6下编译版STLport5.2.1

    2011-11-10 12:34:43
    最新版 STLport5.2.1 Vc6下编译通过,lib中含有编译完成的dll、lib,dll拷到系统目录,lib路径、stlport 路径在vc6中添加,放在最顶层即可,自己已经试过可用。
  • stlport 5.1.6

    2009-01-21 10:49:01
    stlport 开发包 版本5.1.6 .使用stlport 的朋友可以下载
  • 由于需要交叉编译的Poco库依赖stlport库, 所以从STLPort的官方下载了一份最新的源代码[5.2.1]准备交叉编译到TX2环境。 拿到源代码后感觉很不爽,STLPort并不支持cmake和autotools, 映入眼帘的是一个configure 可...
  • STLport V5.2.1

    2009-09-05 09:31:06
    这是STLport 的最新版V5.2.1,编译方式有些改动,具体方法请参考网上资料。
  • stlport 5.2.0

    2009-01-21 10:51:27
    stlport 开发包 版本5.2.0 .使用stlport 的朋友可以下载
  • STLPort编译安装指南

    2010-04-28 16:54:14
    介绍VC下对STLPort的编译安装方法介绍VC下对STLPort的编译安装方法介绍VC下对STLPort的编译安装方法
  • stlport5.2

    2009-06-26 17:34:58
    C++标准类库资料,经典的数据结构和算法实现!官方网站下载的资源!绝对的好东西!
  • D:\STLport\stlport\ctype.h(39): fatal error C1083: 无法打开包括文件: “../include/ctype.h”: No such file or directory NMAKE : fatal error U1077: “"E:\Program Files (x86)\Microsoft Visual Studio ...
  • STLPort for VC6

    2011-09-16 16:07:23
    Windows下编译的STLPort。可供VC6直接使用。
  • STLPort源代码

    2009-02-26 12:08:14
    有些编译器并不能完全支持标准C++,所以一个俄罗斯程序就设计了STLPort帮助像VC++6.0之类的编译器支持完全的标准C++!提供给对之有兴趣的朋友!
  • *** Android NDK: APP_STL stlport_static is no longer supported. Please switch to either c++_static or c++_shared. See https://developer.android.com/ndk/guides/cpp-support.html for more...
  • vs2015中如何安装stlport

    2017-05-06 04:55:44
    我不想用vs2015自带的stl,想使用stlport版本的stl,请问在vs2015中怎么搭建stlport环境呢 我在vs2015中按照如下的网址进行操作总是报错 http://www.cnblogs.com/emyueguang/p/3881544.html 报错内容如下: D:\...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,293
精华内容 2,517
关键字:

STLPort