| |
| ======================================== |
| STLport README for eMbedded Visual C++ 4 |
| ======================================== |
| |
| by: Zdenek Nemec, zero@mapfactor.com, last edited 2005-10-17 |
| |
| ============ |
| Introduction |
| ============ |
| This document should provide step-by-step guidance for installing, testing and using the STLport library under Windows CE .NET 4.x |
| (aka Windows Mobile 2003 aka Pocket PC 2003). |
| For any further comments or questions visit the STLport mailing lists |
| http://stlport.sourceforge.net/Maillists.shtml or forums |
| https://sourceforge.net/forum/?group_id=146814 |
| |
| ============= |
| Prerequisites |
| ============= |
| To build and use the STLport you will need following tools and libraries: |
| - eMbedded Visual C++ 4.0 SP4 |
| - an SDK for your target platform with RTTI support |
| |
| ================ |
| Building STLport |
| ================ |
| First, make sure that RTTI is available. Not all SDKs that come with eVC4 also include |
| the necessary libs, but there is a patch for the PPC2003 SDK, available at |
| http://support.microsoft.com/default.aspx?scid=kb;[LN];830482. |
| |
| Second, open command line and set proper system variables. |
| This can be done by using batch files under your 'eMbedded Visual C++' directory(use either WCEemulator.BAT if you want to build STLport for the emulator or WCEARMV4.BAT if you intend to aim an ARM device). |
| NOTE: If you are using Microsoft's batch files to set system variables check if both WCEROOT and SDKROOT vars are set to correct locations. example: |
| WCEROOT=C:\Program Files\Microsoft eMbedded C++ 4.0 |
| SDKROOT=C:\Program Files\Windows CE Tools |
| |
| Third, when you are 100percent sure you've set correctly systems variables go to the STLport/build/lib dir and run the configure.bat with |
| proper -c option (ie. "-c evc4"), |
| then invoke following command: 'nmake /fmsvc.mak install' to build the library. |
| |
| If anything goes wrong check if you met all prerequisities and if you set system vars accordingly to the makfile you are using. |
| At the end of build process you should have some libs installed in STLport/lib/evc4-arm or STLport/lib/evc4-x86 and dynamic libs in STLport/bin directory. |
| |
| You might want to repeat all those steps if you would like to have |
| e.g. both ARM and x86 emulator binaries, just don't forget to do |
| 'nmake /fmsvc.mak clobber' before new build. |
| |
| Note: MIPS platform is also available for build, but it may not compile or work properly. Use with caution! |
| |
| =============== |
| Testing STLport |
| =============== |
| When you successfuly build STLport libs, you should go to STLport/test/unit directory build and run the STLP test suite. |
| Use 'nmake /fmsvc.mak' and keep in mind that you still have to have proper system variables set! |
| Once test build has finished upload and run stlp_unit_test.exe to your emulator or device. |
| Wait for a while (aprox. 2mins) until all tests are done. |
| You should see two files next to your binary now. |
| Check stlp_test.txt for any errors. If all tests passed you are ready to deploy STLport. |
| If some test fails don't worry and check the STLport forum if it's already reported bug or you have found a new one. |
| |
| ============= |
| Using STLport |
| ============= |
| Setting up the IDE: |
| Before you start using STLport you have to set proper include and libraries search paths. |
| Go to 'Tools'>'Options' menu in your eVC 4.0 and then to 'Directories' tab. |
| For every platform you want to use STLport add STLport/stlport directory to the FIRST place in 'Include Files' |
| and STLport/lib directory in 'Library files' section. |
| |
| Setting up projects: |
| When using STLport together with MFC, you have to define _STLP_USE_MFC to properly include and use STLport. |
| |
| By default, exception support is not activated. You can detect this via _CPPUNWIND and activate this via /GX. |
| Without exception support, e.g. std::bad_alloc is not available, causing compile errors for some code. |
| |
| Also, there is only one runtime available but the IDE doesn't add the corresponding switch to the command line. |
| The right switch (selecting a dynamically linked runtime) is IMHO /MD or /MDd. This then also switches STLport to dynamic linking. |
| Alternatively, you can #define _DLL for your project, which achieves the same but, again IMHO, is a less clean solution. |
| |
| ============ |
| Known issues |
| ============ |
| - The compilers that come with eVC4 are almost bug-to-bug compatible with |
| the one from VC6, so most workarounds for that compiler apply here, too. |
| |
| - There is a bug in the MIPS compiler that comes with eVC4 which only surfaces |
| under certain conditions: |
| * in release mode with global optimizations on (#pragma optimize("g", on)) |
| * a baseclass has (at least) two pointer members |
| * a derived class adds no data members |
| * the derived class' cctor defers to the basclass' compiler-generated cctor |
| * it is passed as template parameter to a function |
| The smallest testcase I could come up with is this: |
| struct base { |
| void* ptr1; |
| void* ptr2; |
| }; |
| struct derived: public base { |
| derived() {} |
| derived(const derived& __x): base(__x) {} |
| }; |
| |
| template<typename SomeType> void function( SomeType st1, SomeType st2) {} |
| |
| struct test { |
| derived tmp; |
| ~test() { function(tmp, tmp); } |
| }; |
| test test; |
| ..which causes an internal compiler error. Removing the base::ptr1, adding data |
| to derived, making function() a normal function, or turning off optimization |
| (#pragma optimize("g", off)) all causes the code to compile. This bug affects |
| iterators of deque and vector<bool>. |
| |
| - Because of interdependancy between STLport and native Standard library headers |
| STLport headers should always be included first in your translation unit (.cpp |
| file). That is to say that: |
| |
| //Wrong headers order: |
| #include <windows.h> |
| #include <cstdlib> |
| |
| // Correct headers order |
| #include <cstdlib> |
| #include <windows.h> |
| |