======================================== STLport README for eMbedded Visual C++ 3 ======================================== by: Michael Fink, vividos@users.sourceforge.net, last edited 2005-11-15 ============ Introduction ============ This document describes how STLport can be compiled and used with Microsoft eMbedded Visual C++ 3. 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: - eMbedded Visual C++ 3.0 - latest CVS version of STLport, use info from page 'http://stlport.sourceforge.net/CVS.shtml' to get it. Note that you may have to get a different branch, please check out the STLport forum "Announcements" which sourcecode is being worked on. ================ Building STLport ================ Note: if you don't plan to use the iostreams part of STLport (via the define _STLP_NO_IOSTREAMS), you don't have to build the library. You can skip straight to the "Using STLport" section. If you want to compile for the Pocket PC 2002 SDK (which in most cases you want) be sure to set the PLATFORM environment variable to "Pocket PC 2002", e.g. with this command: set PLATFORM=Pocket PC 2002 Open a command line prompt and execute the batch file that sets up compiling for ARM or x86 processors. These files usually are in a folder like 'C:\Program Files\Windows CE eMbedded Tools\EVC\WCE300\BIN\' and are called WCEARM.bat and WCEx86.bat. Check if the environment variables are set up properly after that call. You can also adjust the batch files to have the PLATFORM variable set automatically. Go into STLport's 'build\lib' folder and type: configure.bat -c evc3 The makefiles are configured with the given settings. Call configure.bat with the --help option to see all options. The program automatically tells you which command line to use. If you want to install the libraries, add the "install" target as follows: nmake /fmsvc.mak install All libraries (debug, stldebug, release) are now built, static and shared ones. Import libraries (.lib files) are put in the 'lib\evc3-arm' folder, DLLs are put in the 'bin\evc3-arm' folder. If you use another target platform, the name of the folder is changed accordingly, e.g. evc3-x86 for emulator files. Once STLport is built you can decrease the size of the STLport folder by removing intermediate build files. This is done with the following command: nmake /fmsvc.mak clobber Note: MIPS platform is also available for build, but it may not compile or work properly. Use with caution! =============== 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 If you want to build the unit tests for the emulator, you have to reconfigure STLport with the configure.bat, as described above. Once the unit tests are built, upload the binary (found in the 'bin\evc3-arm' folder) to your device or emulator and start it (the test runs for about 30 seconds, depending on the speed of the device). The file 'stlp_test.txt' is created in the root folder of the device, which contains the unit test results. It should report no errors. ============= Using STLport ============= Adjust your include and link paths in eVC3 in 'Tools -> Options -> Directories' and add the paths for all platforms and CPUs on which you want to use STLport. 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\evc3-arm' or 'lib\evc3-x86' (depending on what target you use) folder for the library files (order of paths doesn't matter here). There are some preprocessor defines that control usage of the STLport in evc3 projects: Define the symbol _STLP_USE_STATIC_LIB when you want to statically link against STLport. The linker will remove unused classes and methods then, saving some space in the executable. 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)[_static].<STLport-Version>.lib Examples: stlport_static.5.0.lib - static release version, Version 5.0.0 stlportd_50.lib - dll debug version, Version 5.0.0 Note that usage of the _STLP_DEBUG mode is currently not recommended for eMbedded Visual C++ builds using the ARM compiler, due to a compiler bug. 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. Now you should be ready to use STLport. ============ Known issues ============ - Unit Tests in _STLP_DEBUG mode (target 'stldbg-shared') fails in __stl_debug_engine::_M_detach() for several tests due to unknown reasons. A compiler bug in the ARM compiler is suspected. There is currently no workaround for this bug. It is recommended to not use _STLP_DEBUG mode. - Resource compiler issue: The resource compiler is not a C++ compiler, it is a compiler that translates resource files, i.e. files that describe dialogs, strings, version information and other parts of the GUI on MS Windows systems. The problem is that it includes files from the C/C++ include path, and STLport uses mechanisms the resource compiler can't handle, e.g. using macro names longer than 31 characters. The workaround is to guard all affected headers (stdio.h, string.h, stdarg.h, stdlib.h, ctype.h) against this. The resource compiler is detected by the macro RC_INVOKED. - See also README.evc4 issues.