http://developer.symbian.org/wiki/index.php/Open_C_and_Open_C%2B%2B_Technical_Overview
Monday, September 28, 2009
Friday, September 18, 2009
Problem in compliation on GCCE & CW
I encountered a compilation problem when trying to build a huge library which require many other APIs. It happened on both CodeWarrior and GCCE! What could it be?
Carbide.C++ for CW seemed to compile all cpp files but could not complete the complilation at the end then hang over. (No compilation error had been reported) Whereas GCCE was even worse,
was yield after several cpp files built. Although commenting out these reported error file, the error was still moved to the other files! It should not be the error from source code anyway.
Solution:
Adding
And now what about GCCE ? I did the same with
Checking the GCC document, I then decided to change the debug option from "dwarf" to "stabs" but this did not help either. (-gdwarf-2 and g3 are the default GCC setting, so I override this setting in the project file, my mmp.)
Hmm...let's try other setting. This time with with
Carbide.C++ for CW seemed to compile all cpp files but could not complete the complilation at the end then hang over. (No compilation error had been reported) Whereas GCCE was even worse,
Internal compiler error in dwarf2out_finish dwarf2out.c 13110!!
was yield after several cpp files built. Although commenting out these reported error file, the error was still moved to the other files! It should not be the error from source code anyway.
Solution:
Adding
OPTION CW -w off in your mmp file sounded to solve the problem on CW! (At least in my case, there were too much warning that's why the compiler couldn't end the compilation beautifully!)And now what about GCCE ? I did the same with
OPTION GCCE -w to suppress the default "-Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas" in GCCE.mk.Checking the GCC document, I then decided to change the debug option from "dwarf" to "stabs" but this did not help either. (-gdwarf-2 and g3 are the default GCC setting, so I override this setting in the project file, my mmp.)
Hmm...let's try other setting. This time with with
OPTION GCCE -g -g1 -ggdb ...and it worked!! Done!
Monday, August 17, 2009
Simple Symbian Makefile
Symbian requires makefile for gcce build.
Here is the sample of my makefile, let's call it myproject.mk
Now, if we want to execute the makefile without calling "abld" command, you need firstly set $PLATFORM=GCCE at your shell. Next we can call the make from here:
If anything goes wrong, you can try with "make -d" to debug.
Some pitfalls from make:
- *** missing separator *** => You use the "space" instead of "tab"
- Invalid switch when trying to execute the command from (dos) shell => you missing double quote around the argument passing to the command.
Here is the sample of my makefile, let's call it myproject.mk
# myproject.mk
#
TARGETDIR=.
CERTDIR=../../../../Certificates
TARGETSISFILE=$(TARGETDIR)/myproject.sis
TARGETSISXFILE=$(TARGETDIR)/myprojects.sisx
TARGETPKGFILE=$(TARGETDIR)/myprojects.target.pkg
SOURCEPKGFILE=$(TARGETDIR)/myprojects.pkg
SOURCECERFILE=$(CERTDIR)/dev.cer
SOURCEKEYFILE=$(CERTDIR)/dev.key
PASSWORD=mypassword
BLD : do_nothing
CLEAN : do_nothing
LIB : do_nothing
ifeq (GCCE,$(findstring GCCE, $(PLATFORM)))
FINAL :
$(SOURCECERFILE)
@echo EPOCROOT=$(EPOCROOT)
@echo $(PLATFORM)
#Delete existing sis file
@echo del $(TARGETSISFILE)
@echo del $(TARGETSISXFILE)
# we use command here, please note that we need the double quotes here
del "$(TARGETSISFILE)"
del "$(TARGETSISXFILE)"
#Pass the PKG through the CPP precompiler
# @echo cpp -P $(SOURCEPKGFILE) $(TARGETPKGFILE)
# cpp -P $(SOURCEPKGFILE) $(TARGETPKGFILE)
@echo perl -e "print `makesis -d%EPOCROOT% $(SOURCEPKGFILE) $(TARGETSISFILE)`"
# we can execute this with perl as well
perl -e "print `makesis -d%EPOCROOT% $(SOURCEPKGFILE) $(TARGETSISFILE)`"
#Sign the SIS file
@echo signsis -v -s $(TARGETSISFILE) $(TARGETSISXFILE) $(SOURCECERFILE) $(SOURCEKEYFILE) $(PASSWORD)
signsis -v -s $(TARGETSISFILE) $(TARGETSISXFILE) $(SOURCECERFILE) $(SOURCEKEYFILE) $(PASSWORD)
else
FINAL : do_nothing
endif
Now, if we want to execute the makefile without calling "abld" command, you need firstly set $PLATFORM=GCCE at your shell. Next we can call the make from here:
c:\...sis\>make -f myproject.mk
If anything goes wrong, you can try with "make -d" to debug.
Some pitfalls from make:
- *** missing separator *** => You use the "space" instead of "tab"
- Invalid switch when trying to execute the command from (dos) shell => you missing double quote around the argument passing to the command.
Friday, July 24, 2009
Create Symbian Installation File
1. Edit pkg file in your sis directory. Carbide.C++ will generate default pkg file when you comply the source code with it. The format of pkg file can be found : http://mobile.actionscript.it/Lib/Doc/44/how%20to%20create%20a%20sis%20file.pdf
2. Create sis file and sign file
Either using Carbide.C++ or calling the makesis and signsis from command prompt.
2.1 Using Carbide.C++. Go to "Project"->"Properties"->"Carbide.C++"->"Build Configuration". Select the "Configuration" you want, in "SIS Builder" click "add".
SIS Properties will pop-up. Now, what we need here is only "PKG File", Using "Self sign sis file" would be enough if you don't use any capability. Then when you build the GCCE configuration, the sisx file will be automatic generated.
2.2 Calling makesis and signsis from the command prompt:
c:\sis>makesis myproject.pkg
c:\sis>signsis -?
c:\sis>signsis myproject.sis myproject.sisx ..\cer\mysymbian.cer ..\cer\mysymbian.key myphasepass
3. If you get any error when trying to install your sis file on the device, check out the error from "Interpreting Platform Security Error Messages in S60 3rd Edition" or Forum Nokia.com's "S60 SW Installer Troubleshooting" or from Symbian Foundation's Troubleshooting Installation Errors.
Thursday, July 9, 2009
Rename a bunch of files with a finger tip!
Some cameras have functions to set the name of photos taken, some don't. Some softwares, e.g.Digikam, offer the function to rename the files during import images from camera to a PC.
What about if your camera does not have the function to set the name of the photos or you, for whatever reason, want to rename your collection of files later?
Let's write a simple Bash script to do this job!
First, let us check if the parameters required are less than 3. I always add the usage and help here because this becomes handy whenever you want to know the script syntax.
$# is the argument count.
${0##*/} is the base name of $0 which is the script name to make the output short.
$1,$2 are the first and second arguments.
Next, let us make this change directly inside the directory.
for f in *.[jJ][pP][gG] means for each file matches .jpg or .JPG or .jPg or similar.
old_name=${f##*/} is to get the basename of the file.
new_name=${old_name//$old_string/$new_string} is to replace old string or search string with new string where the old string found in old_name or original file name, then give back the result to the new name.
That's it! A piece of cake, isn't it?
What about if your camera does not have the function to set the name of the photos or you, for whatever reason, want to rename your collection of files later?
Let's write a simple Bash script to do this job!
First, let us check if the parameters required are less than 3. I always add the usage and help here because this becomes handy whenever you want to know the script syntax.
$# is the argument count.
${0##*/} is the base name of $0 which is the script name to make the output short.
$1,$2 are the first and second arguments.
Next, let us make this change directly inside the directory.
for f in *.[jJ][pP][gG] means for each file matches .jpg or .JPG or .jPg or similar.
old_name=${f##*/} is to get the basename of the file.
new_name=${old_name//$old_string/$new_string} is to replace old string or search string with new string where the old string found in old_name or original file name, then give back the result to the new name.
That's it! A piece of cake, isn't it?
#!/bin/bash
if [[ $# -ne 3 ]]; then
echo "To rename jpg files in directory"
echo "usage: ${0##*/} new_string old_string directory"
echo "example: ${0##*/} Graz _MG ~/Pictures/Graz/web"
exit 1
fi
old_string=$2
new_string=$1
cd $3
for f in *.[jJ][pP][gG]
do
old_name=${f##*/} #base filename
new_name=${old_name//$old_string/$new_string} #replace string
if [ ! -w $f ]; then
echo "warning ...$f is not writable "
else
mv $f $new_name
echo "renaming ... $old_name -> $new_name"
fi
done
################END OF FILE##################
Thursday, June 18, 2009
Known issues Qt for S60 4.5 (Garden)
Quite disappointed with Qt 4.5 for S60 am I.
Here are the known issues and it seems I need to wait for another while until most important issues fixed.
http://labs.trolltech.com/page/QtforS60KnownIssues
Most annoying things for me are the GCCE and memory leak issue. This memory leak issue happens to all QtDemo & QtExample apps.
---------------
"Testers exists only if bug exists, bug exists only if developers exists. Don’t worry ‘Testers’ we are always ready to help you." Post by Hari in "101 More Great Computer Quotes"
Here are the known issues and it seems I need to wait for another while until most important issues fixed.
http://labs.trolltech.com/page/QtforS60KnownIssues
Most annoying things for me are the GCCE and memory leak issue. This memory leak issue happens to all QtDemo & QtExample apps.
---------------
"Testers exists only if bug exists, bug exists only if developers exists. Don’t worry ‘Testers’ we are always ready to help you." Post by Hari in "101 More Great Computer Quotes"
Wednesday, April 29, 2009
VC debugger with better data display
As a programmer, I have come across several compilers and although I am not a MS's fan but perhaps VC is the best compiler I ever used.
Now, let us customize autoexp.dat to make a better data display. The file can be found under VS's debugger, eg.:
C:\Programme\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat
The tutorials can be found here:
- Customize autoexp.dat with own types in VS2005
- Writing custom visualizers for Visual Studio 2005, the best reference about customizing autoexp.dat I found so far.
- Visual C++ 2005 IDE Enhancements Part 5: Variable Display
---------------
"premature optimization is the root of all evil." Donald Knuth
Now, let us customize autoexp.dat to make a better data display. The file can be found under VS's debugger, eg.:
C:\Programme\Microsoft Visual Studio 8\Common7\Packages\Debugger\autoexp.dat
The tutorials can be found here:
- Customize autoexp.dat with own types in VS2005
- Writing custom visualizers for Visual Studio 2005, the best reference about customizing autoexp.dat I found so far.
- Visual C++ 2005 IDE Enhancements Part 5: Variable Display
---------------
"premature optimization is the root of all evil." Donald Knuth
Subscribe to:
Posts (Atom)
