Developer Guide |
The Standard C++ library depends on Open C. The user must have the Open C components installed before using the library.
Add needed libraries used by the MMP file structure:
If developers want to use any of Standard C++ library, they must link to the corresponding library in the MMP file using the LIBRARY keyword.
If the application has main() as the entry point, the library libcrt0.lib must be specified as the first library otherwise, it results in linker errors. The user must link to the Symbian OS euser.dll. This is required since the static library uses some of the services of the Symbian OS, such as, creating cleanup stack, and having a top level TRAP. All these details are hidden from the developer. The developer will write the application as if it were for the UNIX environment.
STATICLIBRARY libcrt0.lib LIBRARY libc.lib LIBRARY euser.lib // Needed in order to use Symbian services
The libcrt0.lib library is required for writing to E32Main within our application (EXE). This static library has an implementation of E32Main within which it calls the library initialization method followed by calling main written by the developer. This static library also retrieves command-line arguments and passes the same to main.
If the application has E32Main() as an entry point, there is no need to link to libcrt0.lib like in the example below.
LIBRARY libc.lib LIBRARY euser.lib
Add required include paths
SYSTEMINCLUDE \epoc32\include\stdapis SYSTEMINCLUDE \epoc32\include\stdapis\sys SYSTEMINCLUDE \epoc32\include\stdapis\stlport
Linking of libstdcpp
Following snippet shows how to perform the linking to libstdcpp on an emulator:
#ifdef EPOC32 LIBRARY libstdcpp.lib #else FIRSTLIB ../udeb/libstdcpp.lib STATICLIBRARY eexe.lib #endif
Add the below option and macro in the MMP file
//This is required even if the wchar type is not used. OPTION CW -wchar_t on MACRO _WCHAR_T_DECLARED
EPOCSTACKSIZE 0x10000in the MMP file.
A simple example using main() as an entry point is described below. The example writes a text to a console.
// Include Files #include <iostream> #include <cstring> // This is a GCCE toolchain workaround needed when compiling with GCCE // and using main() entry point #ifdef __GCCE__ #include <staticlibinit_gcce.h> #endif using namespace std; class myclass { public: void show(){cout<<"Hello World\n"; } } ; int main() { myclass obj; obj.show(); cout<<"Press a character to exit!"; int c = getchar(); return 0; }
This section provides procedures for using Open C++ on Carbide.
Figure 1 New Project
Figure 2 New Symbian OS C++ Project
Figure 3 New Basic console application (EXE)
Figure 4 SDKs and Build Configurations
Figure 5 C/C++ projects
/* ============================================================================ Name : HelloWorld.mmp Author : Copyright : Your copyright notice Description : This is the project specification file for HelloWorld. ============================================================================ */ TARGET HelloWorld.exe TARGETTYPE exe UID 0 0xE8212C84 USERINCLUDE ../inc SOURCEPATH ../data SOURCEPATH ../src SOURCE HelloWorld.cpp SYSTEMINCLUDE /epoc32/include SYSTEMINCLUDE /epoc32/include/osextensions/stdapis SYSTEMINCLUDE /epoc32/include/stdapis SYSTEMINCLUDE /epoc32/include/osextensions/stdapis/sys SYSTEMINCLUDE /epoc32/include/stdapis/sys SYSTEMINCLUDE /epoc32/include/osextensions/stdapis/stlport SYSTEMINCLUDE /epoc32/include/stdapis/stlport STATICLIBRARY libcrt0.lib LIBRARY libstdcpp.lib LIBRARY libc.lib LIBRARY libpthread.lib LIBRARY euser.lib OPTION CW -wchar_t on MACRO _WCHAR_T_DECLARED
/ ============================================================================ Name : HelloWorld.cpp Author : Copyright : Your copyright notice Description : Exe source file ============================================================================ */ #include <iostream.h> #include<cstring> // This is a GCCE toolchain workaround needed when compiling with GCCE // and using main() entry point #ifdef __GCCE__ #include <staticlibinit_gcce.h> #endif using namespace std; class myclass { public: void show(){cout<<"Hello World\n"; } }; int main() { myclass obj; obj.show(); cout<<"Press a character to exit!"; int c = getchar(); return 0; }
This removes the HelloWorld Project from the current projects window. There is no re-import option available in Carbide so to retrieve the mmp modifications, delete the project and import it again.
Figure 8 Import
Figure 9 File Import Wizard
Figure 10 SDK and build configurations
Figure 11 MMP Selection
Figure 12 Project Properties
Figure 13 Build Project
Figure 14 Console View
Figure 15 Run Button
Type HelloWorld on the Emulator and press enter to find the final output.
Figure 16 Hello World
Figure 17 Final Output
ŠNokia 2008 |