Браво за успеха с програмата... все пак аз да си дам рапорта или по-точно за това, което го мъчихме вчера:
1. Подразбиращата се версия в FC9 е 4.3, a в Дебиан 4.3.1 (нарочно го споменавам)
2. При опит за компилиране:
2.1. Първата грешка, поради която пропада make е:
- Код за потвърждение: Избери целия код
translator_manager.cpp:314: error: ‘strlen’ was not declared in this scope
Решението е да се промени #include <string> на #include <string.h> в translator_manager.cpp, който се намира в директорията src на gbgoffice, т.е. трябва да изглежда така:
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# grep "\#include" src/translator_manager.cpp
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include "properties.h"
#include "translator_manager.h"
[root gbgoffice-1.4]#
2.2. При опит за make, ще видиме много warning-и от типа:
- Код за потвърждение: Избери целия код
language_tools.h:218: warning: deprecated conversion from string constant to ‘char*’
language_tools.h:224: warning: deprecated conversion from string constant to ‘char*’
language_tools.h:224: warning: deprecated conversion from string constant to ‘char*’
language_tools.h:229: warning: deprecated conversion from string constant to ‘char*’
language_tools.h:229: warning: deprecated conversion from string constant to ‘char*’
language_tools.h:234: warning: deprecated conversion from string constant to ‘char*’
Причината е, че трябва да се добави const преди char *. ЗА целта изпълняваме:
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# sed 's/char/const char/g' src/language_tools.h >src/temp
[root gbgoffice-1.4]# mv src/temp src/language_tools.h
mv: overwrite `src/language_tools.h'? y
[root gbgoffice-1.4]#
2.3. Warning-те изчезнаха, но сега компилацията пропада с
- Код за потвърждение: Избери целия код
workhelper.h:62: error: ‘SigC’ has not been declared
workhelper.h:62: error: ISO C++ forbids declaration of ‘Connection’ with no type
workhelper.h:62: error: expected ‘;’ before ‘con_wait’
In file included from trayicon.cpp:25:
dictgui.h:150: error: ‘SigC’ has not been declared
dictgui.h:150: error: ISO C++ forbids declaration of ‘Connection’ with no type
В дебиан, след 2.2. няма проблем да се компилира речника, но във федората проблемите продължават. Причината е по-малката версия на gcc-то и разликите в декларирането, а именно:
- workhelper.h
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# grep SigC src/workhelper.h
SigC::Connection con_wait;
[root gbgoffice-1.4]#
- dictgui.h
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# grep SigC src/dictgui.h
SigC::Connection con_entry;
SigC::Connection con_timer;
[root gbgoffice-1.4]#
Проблема е, че SigC::Connection, трябва да е с малки букви, т.е. sigc::connection. Ето и как може да го промениме:
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# sed 's/SigC::Connection/sigc::connection/g' src/workhelper.h >src/temp
[root gbgoffice-1.4]# mv src/temp src/workhelper.h
mv: overwrite `src/workhelper.h'? y
[root gbgoffice-1.4]# sed 's/SigC::Connection/sigc::connection/g' src/dictgui.h >src/temp
[root gbgoffice-1.4]# mv src/temp src/dictgui.h
mv: overwrite `src/dictgui.h'? y
[root gbgoffice-1.4]#
След тази операция всичко изглежда както трябва и няма проблем да се продължи с make install или checkinstall.
Тествах го на FC9 и работи
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# cat /etc/redhat-release
Fedora release 9 (Sulphur)
[root gbgoffice-1.4]# gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-cpu=generic --build=i386-redhat-linux
Thread model: posix
gcc version 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC)
[root gbgoffice-1.4]#
Само ще вмъкна и още нещо... във FC9 /usr/bin/gcc не е ln, а си е директен бинарен пакет на версията 4.3.0
- Код за потвърждение: Избери целия код
[root gbgoffice-1.4]# ls -al /usr/bin/gcc*
-rwxr-xr-x 2 root root 219144 2008-04-28 21:37 /usr/bin/gcc
-rwxr-xr-x 1 root root 2018 2008-02-20 08:54 /usr/bin/gccmakedep
[root gbgoffice-1.4]#