2017-10-04 18:37:32 +00:00
|
|
|
|
|
|
|
==================================================
|
|
|
|
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.
|