| |
| ================================================== |
| STLport README for Microsoft Visual C++ compilers. |
| ================================================== |
| |
| by: Francois Dumont, dums@stlport.com, last edited 08/02/2005 |
| |
| ============ |
| Introduction |
| ============ |
| This document describes how STLport can be compiled and used with Microsoft |
| Visual C++ 6 SP5. It can also be used for the MSVC++ family. |
| |
| For any further comments or questsion visit STLport mailing lists |
| http://stlport.sourceforge.net/Maillists.shtml or forums |
| https://sourceforge.net/forum/?group_id=146814 |
| |
| ============= |
| Prerequisites |
| ============= |
| To build and use STLport you will need following tools and libraries: |
| - Microsoft Visual C++ 6.0 with at least Service Pack 5 or any higher |
| version. |
| |
| =================== |
| Configuring STLport |
| =================== |
| In a console window go to the STLport build/lib folder. Run |
| |
| configure --help |
| |
| This command will present you the different available build options. Just follow |
| the instructions to set STLport configuration according your needs. The only |
| mandatory configuration is to declare what is the compiler you are going to |
| use, for MSVC 6 it is: |
| |
| configure -c msvc6 |
| |
| ================ |
| Building STLport |
| ================ |
| This is a step by step description of the actions to take in order to have |
| the STLport library built: |
| |
| 1. Open a console window. You can get it executing cmd or command depending |
| on your Windows OS. |
| |
| 2. Go to MSVC++ Bin directory with a default MSVC6 install it is |
| cd "C:\Program Files\Microsoft Visual Studio\VC98\Bin" |
| |
| 3. Run the vcvars32.bat script. This sets the environment variables required |
| to have the MSVC++ compiler run during the build process. The most important |
| one is the PATH variable so that you can call the cl.exe command which is the |
| MSVC++ command line compiler. [You may omit this step, if you chose 'Install paths |
| to access command-line tools' during Microsoft Visual Studio installation procedure.] |
| |
| 4. Go to the STLport build/lib folder: |
| cd C:\STLport\build\lib |
| |
| 5. Run the following command: |
| nmake /fmsvc.mak install |
| |
| nmake is the make utility from Microsoft. /f is an nmake option |
| telling it which make file script to use. You have of course to grant the |
| closer make file to your effective compiler, msvc.mak in our case. |
| |
| Once the command returns, you will have all the necessary libraries within |
| the STLport lib folder. For a description of the generated libraries check the README |
| file within the src folder. |
| |
| =============== |
| Testing STLport |
| =============== |
| You can use the unit tests to verify STLport behaves correctly. Change into |
| STLports 'build/test/unit' folder and type: |
| |
| nmake /fmsvc.mak install |
| |
| Once the unit test is built you just need to run it. They can be found |
| within the STLport bin folder. |
| |
| ============= |
| Using STLport |
| ============= |
| Adjust your include and link paths in MSVC IDE (in 'Tools -> Options -> Directories' |
| for MSVC6 IDE). In the include files add the path to STLport's 'stlport' folder. |
| Make sure it is the first directory listed there. Add STLport's 'lib' folder for |
| the library files (order of paths doesn't matter here). |
| |
| There are some preprocessor defines that control usage of the STLport in msvc |
| projects: |
| |
| If you don't want to use the iostreams part of the library, you can specify the |
| define _STLP_NO_IOSTREAMS. In this mode there is no need to link against the |
| library. |
| |
| STLport uses automatic linking to find the proper .lib file. If you want to see |
| what import library STLport is going to use, define _STLP_VERBOSE_AUTO_LINK. |
| When not using automatic linking (by specifying _STLP_DONT_USE_AUTO_LINK), you |
| have to specify the proper .lib file in the Project Settings, on the "link" tab. |
| The .lib names have the following syntax: |
| |
| stlport[d|stld][_x,_static,_statix].<STLport-Version>.lib |
| |
| d : debug build |
| stld: debug build with _STLP_DEBUG (STL safe) mode |
| _x: Build of STLport as a dll but statically link to the native runtime. |
| _static : build of a static library |
| _statix : build of a static library link dynamically to the native runtime. |
| |
| Examples: |
| |
| stlport_static.5.0.lib - static release version, Version 5.0.0 |
| stlportd.5.0.lib - dll debug version, Version 5.0.0 |
| |
| When using STLport together with MFC, be sure to include the MFC headers first, |
| then include STLport headers, e.g. in your Stdafx.h. This way STLport correctly |
| recognizes MFC usage. You also can define the macro _STLP_USE_MFC, either in |
| your project settings or in stlport/stl/config/user_config.h. |
| |
| In order to enhance debugging with STLport you can optionally add the content of |
| the etc/autoexp.dat file in the autoexp.dat file coming with your Visual Studio |
| install. |
| |
| Now you should be ready to use STLport. |
| |
| ============ |
| Known issues |
| ============ |
| |
| 1. InterlockedIncrement |
| |
| If you experiment trouble with the InterlockedIncrement Win32 API function |
| like the following message: |
| |
| C:\Program Files\Microsoft SDK\Include\.\winbase.h(1392) : error C2733: second C |
| linkage of overloaded function 'InterlockedIncrement' not allowed |
| C:\Program Files\Microsoft SDK\Include\.\winbase.h(1390) : see declaration of |
| 'InterlockedIncrement' |
| |
| It means that you are using the new Microsoft platform SDK. There is no |
| way to known it from STLport code so you have to signal it in the |
| stlport/stl/config/user_config.h file (uncomment _STLP_NEW_PLATFORM_SDK in this file). |
| |
| 2. Native C/C++ library headers location |
| |
| If you experiment trouble with location of ctime and other Standard headers |
| while building or using STLport you might be using the compiler coming with a |
| platform SDK. If so please uncomment _STLP_USING_PLATFORM_SDK_COMPILER in |
| stlport/stl/config/user_config.h. If it still do not find native headers you will |
| perhaps need to change native headers relative path used by STLport. In this case use |
| _STLP_NATIVE_INCLUDE_PATH and associated macro in stlport/stl/config/host.h. |
| |
| 4. C symbols in std namespace |
| |
| The compiler of MSVC++ 6 has a bug when dealing with symbols existant in both |
| the global namespace and symbols imported by a using-directive or a |
| using-declaration - it will report an ambiguous call to an overloaded |
| function (error C2668). Example: |
| |
| void function(); |
| namespace ns { |
| void function(); |
| // or: |
| // using ::function; |
| } |
| |
| using ns::function; |
| // or: |
| // using namespace ns; |
| |
| void call() { |
| function(); |
| } |
| |
| Since we anticipate that using-declarations or even using-directives are common |
| use, STLport by default doesn't import or wrap functions that exist in both the |
| global namespace and namespace std, in particular those are functions with C |
| origin like fopen() or abs(). Also, it defines additional overloads for |
| functions like abs() (overloaded for int, long, float, double, long double) in |
| the global namespace. |
| |
| In order to make STLport include them in the std namespace, you can define the |
| _STLP_DO_IMPORT_CSTD_FUNCTIONS macro. Doing so, you will have to explicitely |
| scope all your functions calls like std::abs() though - otherwise you only get |
| the global abs(int) from the C library. |