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