Common build problems in Symbian C++
From Forum Nokia Wiki
The following page lists most of the common build problems in Symbian C++. It provides an example of the message as well as provides possible solutions to the problem.
These problems may come when:
- Building the project using abld command
- Creating package file using makesis
- Some other Symbian OS build tools.
abld.bat: "mwldsym2.exe: Undefined symbol: ..."
Message:
mwldsym2.exe: Undefined symbol: 'int RFs::Connect(int) (?Connect@RFs@@QAEHH@Z)' mwldsym2.exe: referenced from 'void CHelloWorldBasicAppUi::ConstructL(void) (?Co nstructL@CHelloWorldBasicAppUi@@UAEXXZ)' in HelloWorldBasicAppUi.cpp:50
Cause:
This error message comes when the code is calling methods from a library, but the library is not declared in the .mmp file.
Another possibility is missing .cpp file in the .mmp file. It happens when the code uses a class or function from a header file; but its .cpp file is not included.
Solution:
The solution is to include the library (.lib) in the .mmp file. For the message above, the missing library is efsrv.lib
LIBRARY efsrv.lib
Note that Carbide.c++ 1.1 does not use .mmp file to compile the project. To add the library to Carbide.c++ 1.1, right click the project name and select Properties menu. Go to C/C++ Build | Linker | Libraries. Add the library name to the Libraries box.
Carbide.c++ 1.2 uses .mmp to compile the project; so there is no need to modify the Properties dialog.
If the problem is related to missing .cpp file, then the solution is to add the .cpp file to the .mmp file. For example:
SOURCE myfile.cpp
abld.bat: "undefined identifier ..."
Message:
..\src\HelloWorldBasicAppUi.cpp:82: undefined identifier 'CAknWarningNote' ..\src\HelloWorldBasicAppUi.cpp:86: undefined identifier 'note'
Cause:
This message comes when a code is using a method from a class; but the header file is not included.
Solution:
The solution is to include the necessary header files to the source code. The header file information can be found in the SDK Help. Search the class name or method name in the SDK Help.
For the error message above, the missing header file is aknnotewrappers.h. It can be fixed by adding the following line:
#include <aknnotewrappers.h>
abld.bat: "Can't find following headers in User or System Include Paths"
Message:
WARNING: Can't find following headers in User or System Include Paths "HelloWorldBasic.hrh" (User Inc Paths "\symbian\9.2\s60_3rd_fp1\s60ex\helloworldbasic\data\") Dependency list for "\Symbian\9.2\S60_3rd_FP1\S60Ex\HelloWorldBasic\data\HelloWo rldBasic.rss" may be incomplete
Cause:
This message comes when the code includes a header file, but it cannot be found in any of the SYSTEMINCLUDE or USERINCLUDE folders. Although it is a warning, in many cases, it will stop the compilation because the compiler cannot find some header files.
Solution:
The solution is to include the folder of the header file in the .mmp file. For example:
USERINCLUDE ..\inc
abld.bat: "...has initialised data"
Message:
ERROR: Dll '\Symbian\9.2\S60_3rd_FP1\EPOC32\BUILD\Symbian\9.2\S60_3rd_FP1\S60Ex\ Animation\server\group\ANIMATION_SERVER\ARMV5\UREL\Animation_server.dll' has ini tialised data.
Cause:
This message comes when the compiler finds a global variable in a DLL. On pre-Symbian OS 9, it happens also on application (.app).
Solution:
The solution is to remove the definition of global variable. There are some other more complicated solutions. For more information, please see Writeable static data.
abld.bat: "CreateProcess((null), mwccsym2.exe ... failed"
Message:
process_begin: CreateProcess((null), mwccsym2.exe -g -O0 -inline off -wchar_t of f -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -s tr pool -exc ms -trigraphs on -nostdinc -d _DEBUG -d _UNICODE -d __SYMBIAN32__ - d __SERIES60_31__ -d __SERIES60_3X__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __ EXE__ -d __SUPPORT_CPP_EXCEPTIONS__ -cwd source -i- -i \Symbian\9.2\S60_3rd_FP1\ S60Ex\HelloWorldBasic\inc -i \Symbian\9.2\S60_3rd_FP1\EPOC32\include -i \Symbian \9.2\S60_3rd_FP1\epoc32\include\variant -i "\Symbian\9.2\S60_3rd_FP1\epoc32\incl ude\variant\ " -include Symbian_OS_v9.2.hrh -o \Symbian\9.2\S60_3rd_FP1\EPOC32\B UILD\Symbian\9.2\S60_3rd_FP1\S60Ex\HelloWorldBasic\group\HELLOWORLDBASIC\WINSCW\ UDEB\HelloWorldBasic.o -c \Symbian\9.2\S60_3rd_FP1\S60Ex\HelloWorldBasic\src\Hel loWorldBasic.cpp, ...) failed.
Cause:
This message comes when abld.bat cannot find the executable of [Nokia_x86_compiler|x86 compiler]. This compiler is shipped with Carbide.c++.
Solution:
The solution is to add the path of the x86 compiler (mwccsym2.exe) into PATH environment variable. This can be done by running a tool, called env_update.exe. For Carbide.c++ 1.2, this tool is located at \carbide\x86Build\env_switch. Run the tool and follow the instruction to setup all the needed environments.
makesis.exe: "error: file I/O fault"
Message:
Processing helloworldbasic_armv5.pkg... Error : Cannot find file : ..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.rsc helloworldbasic_armv5.pkg(21) : error: file I/O fault.
Cause:
This message comes when creating a .sis file from the .pkg file. Normally, the cause can be either one of the following:
- The path of the file is wrong.
- The file cannot be found by makesis.
Solution:
Open the .pkg file and go to the line that causes the error. Check whether the path is correct. If it is correct, then check whether the file exists in the file system.
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| problem with Carbide when use #ifdef | Dipakbaviskar | Carbide.c++ and CodeWarrior Tools | 5 | 2006-11-28 14:47 |
| 'link.exe' 不是内部或外部命令,也不是可运行的程序 | YngwieWang | Symbian | 5 | 2006-12-04 14:29 |
| Problems building with Vista | arunpirku | Carbide.c++ and CodeWarrior Tools | 3 | 2007-11-19 13:09 |
| 【求助】一个命令行编译的问题 | houdezaiwumqb | Symbian | 3 | 2008-03-27 09:24 |
| need help | freesui1984 | General Symbian C++ | 20 | 2007-10-02 14:08 |
