Recently, we have one project which need porting linux program to windows.
Because this project used log4cpp to do logging operation, we log4cpp also need be ported.
Here I will record each issue during porting process.
1. Missing “config-MinGW32.h”, this is a common issue at the beginning. I think log4cpp developer forgot to packing this header file when release package.
This file can be found in CVS of log4cpp project.
2. ‘long long long’ is too long for GCC
$ g++ -I. -I../include -I../include -O2 -DNDEBUG -Wall -Wno-unused -pedantic –
MT Appender.lo -MD -MP -MF .deps/Appender.Tpo -c Appender.cpp -DDLL_EXPORT -DP
IC -o .libs/Appender.o
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/wchar.h:405,
from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cwchar:47,
from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/postypes.h:42,
from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/bits/char_traits.h:42,
from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/string:42,
from ../include/log4cpp/Appender.hh:14,
from Appender.cpp:11:
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/../../../../include/stdint.h:33: error: ‘long long long’ is too long for GCC
a) Add –g3 and -save-temps to see preprocess source.
We see in temp reprocess file “Appender.ii” there are one line “typedef long long long long”, this is because:
in <stdint.h> “ typedef long long int64_t”,
but in config-MinGW32.h, int64_t was defined as “#define int64_t __int64”
and in <_mingw.h> __int64 was defined as “#define __int64 long long”
So error happened.
To fixing this issue, I comment one line in “config-MinGW32.h”, LINE 20: “#define int64_t __int64”
3. dd
C:/msys/1.0/bin/sh.exe ../libtool –tag=CXX –mode=compile g++ -DHAVE_CONFIG_H -I. -I../include -I../include -O2 -DNDEBUG -Wall -Wno-unused -pedantic -MT PatternLayout.lo -MD -MP -MF .deps/PatternLayout.Tpo -c -o PatternLayout.lo PatternLayout.cpp
g++ -DHAVE_CONFIG_H -I. -I../include -I../include -O2 -DNDEBUG -Wall -Wno-unused -pedantic -MT PatternLayout.lo -MD -MP -MF .deps/PatternLayout.Tpo -c PatternLayout.cpp -DDLL_EXPORT -DPIC -o .libs/PatternLayout.o
PatternLayout.cpp: In member function ‘virtual void log4cpp::PatternLayout::setConversionPattern(const std::string&)’:
PatternLayout.cpp:373: error: call of overloaded ‘abs(int&)’ is ambiguous
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cmath:94: note: candidates are: double std::abs(double)
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cmath:98: note: float std::abs(float)
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/cmath:102: note: long double std::abs(long double)
a) changed to “abs((double)xxx)” in PatternLayout.cpp
Hello,
i am trying to port a linux project into windows as well, did you build your project with log4cpp successfully? Is it any other problems that you haven’t mentioned here?
Hah I am really the first comment to this awesome post?!?
Hello,
I’m also porting a project to Windows, using log4cpp, with MSYS and MinGW. At the end of the sh configure, I get :
creating include/log4cpp/config.h – prefix LOG4CPP for include/config.h defines dirname: extra operand `/etc’
Try `dirname –help’ for more information.
/* automatically generated bcb5/ config/ doc/ include/ m4/ msvc6/ openvms/ src
I don’t know if it is normal… So I ran make :
makefile:722: *** target file `tags’ has both : and :: entries. Stop.
An idea ?
Ok, forget this. Removing one of the two “:” is ok. I got one more error : std::auto_ptr was not declared, missing an include of in BasicLayout.cpp.
Now, it’s complaining about Doxygen… But make install runs pretty fine. So it’s ok.
Hi,
Quite helpful your post.
I got the same errors like yours and one extra.
./configure is ok
make or make install give me this:
BasicLayout.cpp:37 error: expected constructor, destructor, or type conversion before ‘<' token
Do you have any idea ?
ps: I compile the log4cpp-1.0 version
solved. Just to add #include in BasicLayout.cpp for the std::auto_ptr
Sorry I did not see the previous reply of Kernald.
add #include in BasicLayout.cpp
I don know where wordpress remove the word after #include my posts (security ???). Sorry for duplicated posts