This topic describes how to troubleshoot issues that you may face while writing or building Std C++ code on the Symbian platform.
Problem
You may get a build error when you create a static library as illustrated in the following code and link it with an STDEXE .
The .mmp file of the static library:
//operator_new_failure_example_lib.mmp Target operator_new_failure_example_lib.lib Targettype lib Source op_new_in_lib.cpp Systeminclude /epoc32/include/stdapis/stlportv5 Systeminclude /epoc32/include/stdapis
The .cpp file of operator new reference in the static library example:
// op_new_in_lib.cpp contents #include <new> int doSomething() { try { int *ptr = new int(0); // This refers the StdC++ operator new //do something moreā¦ } catch (std::bad_alloc) { return 1; } delete ptr; return 0; }
The .mmp file of the STDEXE that links with the static library:
//operator_new_failure_example.mmp Target operator_new_failure_example.exe Targettype stdexe Source op_new_in_stdexe.cpp Systeminclude /epoc32/include/stdapis/stlportv5 Systeminclude /epoc32/include/stdapis Library libstdcppv5.lib libc.lib Staticlibrary operator_new_failure_example_lib.lib Capability all -tcb
The .cpp file of operator new reference in static library example:
// op_new_in_stdexe.cpp contents looks as follows: int main() { // the doSomething function is defined in the static library operator_new_failure_example_lib.lib that this exe is linking against. return doSomething(); }
Solution
The build error is caused because this code violates rule 5 under the Guidelines for Writing Standard C++ Libraries section. As per the rule, a static library of target type LIB cannot be linked against an STDEXE or STDDLL , unless it has the MMP keyword, STDCPP in its .mmp file.
You can fix the build error by adding STDCPP in the operator_new_failure_example_lib.mmp file as shown in the following code:
//operator_new_failure_example_lib.mmp Target operator_new_failure_example_lib.lib Targettype lib //The STDCPP keyword specifies Standard C++ STDCPP Source op_new_in_lib.cpp Systeminclude /epoc32/include/stdapis/stlportv5 Systeminclude /epoc32/include/stdapis
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.