Compiling belpcscd
Dear lazyweb, please tell me:
wouter@country:~/debian/eID/belpic-2.3.13.full$ LC_ALL=C make Making all in winscarp make[1]: Entering directory `/home/wouter/debian/eID/belpic-2.3.13.full/winscarp' [...] Making all in belpcscd make[1]: Entering directory `/home/wouter/debian/eID/belpic-2.3.13.full/belpcscd' if g++ -DPACKAGE_NAME=\"belpcscd\" -DPACKAGE_TARNAME=\"belpcscd\" \ -DPACKAGE_VERSION=\"2.3.13\" -DPACKAGE_STRING=\"belpcscd\ 2.3.13\" \ -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"belpcscd\" -DVERSION=\"2.3.13\" \ -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 \ -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 \ -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FCNTL_H=1 \ -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_TIMEB_H=1 -DHAVE__BOOL=1 \ -DHAVE_STDBOOL_H=1 -DHAVE_UNISTD_H=1 -DHAVE_FORK=1 -DHAVE_VFORK=1 \ -DHAVE_WORKING_VFORK=1 -DHAVE_WORKING_FORK=1 -DHAVE_STDLIB_H=1 \ -DHAVE_MALLOC=1 -DHAVE_STDLIB_H=1 -DHAVE_REALLOC=1 -DHAVE_SYS_SELECT_H=1 \ -DHAVE_SYS_SOCKET_H=1 -DSELECT_TYPE_ARG1=int \ -DSELECT_TYPE_ARG234=\(fd_set\ \*\) -DSELECT_TYPE_ARG5=\(struct\ \ timeval\ \*\) -DRETSIGTYPE=void -DHAVE_FTIME=1 -DHAVE_INET_NTOA=1 \ -DHAVE_MEMSET=1 -DHAVE_SELECT=1 -DHAVE_STRCASECMP=1 -DHAVE_STRCHR=1 \ -DHAVE_STRSTR=1 -I. -I. -Wall -Dlinux -I. \ -I../ObjectsMultiPlatform/Include -I/usr/include/PCSC `wx-config \ --cppflags` -g -O2 -MT belpcscd-wxmainapp.o -MD -MP -MF \ ".deps/belpcscd-wxmainapp.Tpo" -c -o belpcscd-wxmainapp.o `test -f \ 'wxmainapp.cpp' || echo './'`wxmainapp.cpp; \ then mv -f ".deps/belpcscd-wxmainapp.Tpo" ".deps/belpcscd-wxmainapp.Po"; else rm -f ".deps/belpcscd-wxmainapp.Tpo"; exit 1; fi wxmainapp.h:88: warning: 'class MyApp' has virtual functions but non-virtual destructor wxmainapp.cpp: In function 'int main(int, char**)': wxmainapp.cpp:239: error: 'wxInitializer' was not declared in this scope wxmainapp.cpp:239: error: expected `;' before 'initializer' wxmainapp.cpp:240: error: 'initializer' was not declared in this scope make[1]: *** [belpcscd-wxmainapp.o] Error 1 make[1]: Leaving directory `/home/wouter/debian/eID/belpic-2.3.13.full/belpcscd' make: *** [all-recursive] Error 1 wouter@country:~/debian/eID/belpic-2.3.13.full$
(line feeds added for readability)
The offending bit of wxmainapp.cpp looks like:
int main(int argc, char **argv) { wxApp::CheckBuildOptions(wxBuildOptions()); wxInitializer initializer; if ( !initializer ) { fprintf(stderr, "Failed to initialize the wxWindows library, aborting."); return -1; } MyApp *pTheApp= new MyApp(); pTheApp->OnInit(); while(1) sleep(1); /* run */ }
which doesn't look incorrect to me, but I could be wrong. class wxInitializer is defined in <wx/app.h>, which (according to gcc -E output) seems to be included (even if only indirectly), and its use is to initialize and cleanup the library automatically, so it would seem that upstream used it properly in the above bit of code.
People with more C++/wx knowledge than me would make me very happy if they'd point out what's wrong. Even if they first need more info to do so.
Thanks.
Update: Seems I need wxbase-2.4-config, rather than wx-config. As the upstream makefile (which I'm ignoring for the time being) showed me. Really need to learn to trust other people's judgement some time...
Although I'm by no means an expert on wxWidgets, I've dealt with it enough to know my way around the headers; still, you may want to take my advice with a grain of salt. Anyway:
It depends in part on whether you're using wxWidgets 2.4 or 2.6. In 2.4, wx/app.h is indeed the right header, but wxInitializer is availble only if wxUSE_GUI isn't on, which means using libwxbase2.4-dev and making sure you get wxbase-2.4-config rather than some other wx-config.
In 2.6, meanwhile, it looks like wxInitializer is always available, but declared in wx/init.h rather than wx/app.h.
HTH; HAND.