Ergebnis 1 bis 10 von 10

Thema: gnu CGI (cgicc) v3.2 und Win32

  1. #1
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    47
    Renommee
    10

    gnu CGI (cgicc) v3.2 und Win32

    Hallo,

    hat irgendwer Erfahrungen mit dem Bau von cgicc unter Win32? Ich bekomme hier noch graue Haare.

    Die mitgelieferte Automake-Umgebung funktioniert weder unter Cygwin noch MinGW. Das ./configure läuft ohne Probleme durch. Das make wirft unter MinGW folgenden Fehler:
    Code:
    $ make
    Making all in cgicc
    make[1]: Entering directory `/c/sonstiges/cgicc-3.2/cgicc'
    cd .. \
              && CONFIG_FILES= CONFIG_HEADERS=cgicc/config.h \
                 /bin/sh ./config.status
    config.status: creating cgicc/config.h
    config.status: cgicc/config.h is unchanged
    make  all-am
    make[2]: Entering directory `/c/sonstiges/cgicc-3.2/cgicc'
    source='CgiEnvironment.cpp' object='CgiEnvironment.lo' libtool=yes \
            depfile='.deps/CgiEnvironment.Plo' tmpdepfile='.deps/CgiEnvironment.TPl
    ' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I..
    I..    -Wall -W -pedantic -g -O2 -c -o CgiEnvironment.lo `test -f CgiEnvironmen
    .cpp || echo './'`CgiEnvironment.cpp
    rm -f .libs/CgiEnvironment.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c CgiEnvir
    nment.cpp -MT CgiEnvironment.lo -MD -MP -MF .deps/CgiEnvironment.TPlo  -DDLL_EX
    ORT -DPIC
    In file included from ../cgicc/CgiEnvironment.h:42,
                     from CgiEnvironment.cpp:36:
    ../cgicc/CgiDefs.h:57:1: warning: "HOST" redefined
    In file included from ../cgicc/CgiDefs.h:34,
                     from ../cgicc/CgiEnvironment.h:42,
                     from CgiEnvironment.cpp:36:
    ../cgicc/config.h:32:1: warning: this is the location of the previous definitio
    
    In file included from ../cgicc/CgiEnvironment.h:44,
                     from CgiEnvironment.cpp:36:
    ../cgicc/HTTPCookie.h:152: warning: unused parameter 'cookie'
    In file included from CgiEnvironment.cpp:36:
    ../cgicc/CgiEnvironment.h:52: error: explicit instantiation of 'class std::vect
    r<cgicc::HTTPCookie, std::allocator<cgicc::HTTPCookie> >' in namespace 'cgicc'
    which does not enclose namespace 'std')
    CgiEnvironment.cpp:40: warning: 'cgicc::CgiEnvironment::CgiEnvironment(size_t (
    )(void*, size_t))' redeclared without dllimport attribute: previous dllimport i
    nored
    CgiEnvironment.cpp:79: warning: 'cgicc::CgiEnvironment::~CgiEnvironment()' rede
    lared without dllimport attribute: previous dllimport ignored
    CgiEnvironment.cpp:85: warning: 'void cgicc::CgiEnvironment::parseCookies()' re
    eclared without dllimport attribute after being referenced with dll linkage
    CgiEnvironment.cpp:114: warning: 'void cgicc::CgiEnvironment::parseCookie(const
    std::string&)' redeclared without dllimport attribute after being referenced wi
    h dll linkage
    CgiEnvironment.cpp:140: warning: 'void cgicc::CgiEnvironment::readEnvironmentVa
    iables()' redeclared without dllimport attribute after being referenced with dl
     linkage
    CgiEnvironment.cpp:186: warning: 'void cgicc::CgiEnvironment::save(const std::s
    ring&) const' redeclared without dllimport attribute: previous dllimport ignore
    
    CgiEnvironment.cpp:231: warning: 'void cgicc::CgiEnvironment::restore(const std
    :string&)' redeclared without dllimport attribute: previous dllimport ignored
    make[2]: *** [CgiEnvironment.lo] Error 1
    make[2]: Leaving directory `/c/sonstiges/cgicc-3.2/cgicc'
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/c/sonstiges/cgicc-3.2/cgicc'
    make: *** [all-recursive] Error 1
    Unter Cygwin sieht es nicht besser aus:
    Code:
    $ make
    Making all in cgicc
    make[1]: Entering directory `/cygdrive/c/sonstiges/cgicc-3.2/cgicc'
    cd .. \
              && CONFIG_FILES= CONFIG_HEADERS=cgicc/config.h \
                 /bin/sh ./config.status
    config.status: creating cgicc/config.h
    config.status: cgicc/config.h is unchanged
    make  all-am
    make[2]: Entering directory `/cygdrive/c/sonstiges/cgicc-3.2/cgicc'
    source='CgiEnvironment.cpp' object='CgiEnvironment.lo' libtool=yes \
            depfile='.deps/CgiEnvironment.Plo' tmpdepfile='.deps/CgiEnvironment.TPlo
    ' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o CgiEnvironment.lo `test -f CgiEnvironment
    .cpp || echo './'`CgiEnvironment.cpp
    rm -f .libs/CgiEnvironment.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c CgiEnviro
    nment.cpp -MT CgiEnvironment.lo -MD -MP -MF .deps/CgiEnvironment.TPlo  -DDLL_EXP
    ORT -DPIC
    mv -f CgiEnvironment.o .libs/CgiEnvironment.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c CgiEnviro
    nment.cpp -MT CgiEnvironment.lo -MD -MP -MF .deps/CgiEnvironment.TPlo >/dev/null
     2>&1
    mv -f .libs/CgiEnvironment.lo CgiEnvironment.lo
    source='CgiUtils.cpp' object='CgiUtils.lo' libtool=yes \
            depfile='.deps/CgiUtils.Plo' tmpdepfile='.deps/CgiUtils.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o CgiUtils.lo `test -f CgiUtils.cpp || echo
     './'`CgiUtils.cpp
    rm -f .libs/CgiUtils.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c CgiUtils.
    cpp -MT CgiUtils.lo -MD -MP -MF .deps/CgiUtils.TPlo  -DDLL_EXPORT -DPIC
    mv -f CgiUtils.o .libs/CgiUtils.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c CgiUtils.
    cpp -MT CgiUtils.lo -MD -MP -MF .deps/CgiUtils.TPlo >/dev/null 2>&1
    mv -f .libs/CgiUtils.lo CgiUtils.lo
    source='Cgicc.cpp' object='Cgicc.lo' libtool=yes \
            depfile='.deps/Cgicc.Plo' tmpdepfile='.deps/Cgicc.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o Cgicc.lo `test -f Cgicc.cpp || echo './'`
    Cgicc.cpp
    rm -f .libs/Cgicc.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c Cgicc.cpp
     -MT Cgicc.lo -MD -MP -MF .deps/Cgicc.TPlo  -DDLL_EXPORT -DPIC
    mv -f Cgicc.o .libs/Cgicc.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c Cgicc.cpp
     -MT Cgicc.lo -MD -MP -MF .deps/Cgicc.TPlo >/dev/null 2>&1
    mv -f .libs/Cgicc.lo Cgicc.lo
    source='FormEntry.cpp' object='FormEntry.lo' libtool=yes \
            depfile='.deps/FormEntry.Plo' tmpdepfile='.deps/FormEntry.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o FormEntry.lo `test -f FormEntry.cpp || ec
    ho './'`FormEntry.cpp
    rm -f .libs/FormEntry.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c FormEntry
    .cpp -MT FormEntry.lo -MD -MP -MF .deps/FormEntry.TPlo  -DDLL_EXPORT -DPIC
    mv -f FormEntry.o .libs/FormEntry.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c FormEntry
    .cpp -MT FormEntry.lo -MD -MP -MF .deps/FormEntry.TPlo >/dev/null 2>&1
    mv -f .libs/FormEntry.lo FormEntry.lo
    source='FormFile.cpp' object='FormFile.lo' libtool=yes \
            depfile='.deps/FormFile.Plo' tmpdepfile='.deps/FormFile.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o FormFile.lo `test -f FormFile.cpp || echo
     './'`FormFile.cpp
    rm -f .libs/FormFile.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c FormFile.
    cpp -MT FormFile.lo -MD -MP -MF .deps/FormFile.TPlo  -DDLL_EXPORT -DPIC
    mv -f FormFile.o .libs/FormFile.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c FormFile.
    cpp -MT FormFile.lo -MD -MP -MF .deps/FormFile.TPlo >/dev/null 2>&1
    mv -f .libs/FormFile.lo FormFile.lo
    source='HTMLAttribute.cpp' object='HTMLAttribute.lo' libtool=yes \
            depfile='.deps/HTMLAttribute.Plo' tmpdepfile='.deps/HTMLAttribute.TPlo'
    \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o HTMLAttribute.lo `test -f HTMLAttribute.c
    pp || echo './'`HTMLAttribute.cpp
    rm -f .libs/HTMLAttribute.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLAttri
    bute.cpp -MT HTMLAttribute.lo -MD -MP -MF .deps/HTMLAttribute.TPlo  -DDLL_EXPORT
     -DPIC
    mv -f HTMLAttribute.o .libs/HTMLAttribute.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLAttri
    bute.cpp -MT HTMLAttribute.lo -MD -MP -MF .deps/HTMLAttribute.TPlo >/dev/null 2>
    &1
    mv -f .libs/HTMLAttribute.lo HTMLAttribute.lo
    source='HTMLAttributeList.cpp' object='HTMLAttributeList.lo' libtool=yes \
            depfile='.deps/HTMLAttributeList.Plo' tmpdepfile='.deps/HTMLAttributeLis
    t.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o HTMLAttributeList.lo `test -f HTMLAttribu
    teList.cpp || echo './'`HTMLAttributeList.cpp
    rm -f .libs/HTMLAttributeList.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLAttri
    buteList.cpp -MT HTMLAttributeList.lo -MD -MP -MF .deps/HTMLAttributeList.TPlo
    -DDLL_EXPORT -DPIC
    mv -f HTMLAttributeList.o .libs/HTMLAttributeList.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLAttri
    buteList.cpp -MT HTMLAttributeList.lo -MD -MP -MF .deps/HTMLAttributeList.TPlo >
    /dev/null 2>&1
    mv -f .libs/HTMLAttributeList.lo HTMLAttributeList.lo
    source='HTMLDoctype.cpp' object='HTMLDoctype.lo' libtool=yes \
            depfile='.deps/HTMLDoctype.Plo' tmpdepfile='.deps/HTMLDoctype.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o HTMLDoctype.lo `test -f HTMLDoctype.cpp |
    | echo './'`HTMLDoctype.cpp
    rm -f .libs/HTMLDoctype.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLDocty
    pe.cpp -MT HTMLDoctype.lo -MD -MP -MF .deps/HTMLDoctype.TPlo  -DDLL_EXPORT -DPIC
    
    mv -f HTMLDoctype.o .libs/HTMLDoctype.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLDocty
    pe.cpp -MT HTMLDoctype.lo -MD -MP -MF .deps/HTMLDoctype.TPlo >/dev/null 2>&1
    mv -f .libs/HTMLDoctype.lo HTMLDoctype.lo
    source='HTMLElement.cpp' object='HTMLElement.lo' libtool=yes \
            depfile='.deps/HTMLElement.Plo' tmpdepfile='.deps/HTMLElement.TPlo' \
            depmode=gcc3 /bin/sh ../support/depcomp \
            /bin/sh ../libtool --mode=compile g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -
    I..    -Wall -W -pedantic -g -O2 -c -o HTMLElement.lo `test -f HTMLElement.cpp |
    | echo './'`HTMLElement.cpp
    rm -f .libs/HTMLElement.lo
    g++ -DHAVE_CONFIG_H -I. -I. -I. -I.. -I.. -Wall -W -pedantic -g -O2 -c HTMLEleme
    nt.cpp -MT HTMLElement.lo -MD -MP -MF .deps/HTMLElement.TPlo  -DDLL_EXPORT -DPIC
    
    HTMLElement.cpp: In member function 'bool cgicc::HTMLElement::operator==(const c
    gicc::HTMLElement&) const':
    HTMLElement.cpp:74: error: 'strcmp' was not declared in this scope
    make[2]: *** [HTMLElement.lo] Fehler 1
    make[2]: Leaving directory `/cygdrive/c/sonstiges/cgicc-3.2/cgicc'
    make[1]: *** [all] Fehler 2
    make[1]: Leaving directory `/cygdrive/c/sonstiges/cgicc-3.2/cgicc'
    make: *** [all-recursive] Fehler 1

    Wenn ich nun alles mit eigenem Makefile übersetzen möchte, das benötigte CFLAGS=-DWIN32 und -I.. mit an den Compiler übergebe bekomme ich zum Dank diese wunderschöne Meldung:

    Code:
    explicit instantiation of 'class std::vector<cgicc::HTTPCookie, std::allocator<cgicc::HTTPCookie> >' in namespace 'cgicc' (which does not enclose namespace 'std')	CgiEnvironment.h	/cgicc/cgicc	line 52
    CgiEnvironment.h:51 bis 53 in enthält:
    Code:
    #ifdef WIN32
        template class CGICC_API STDNS vector<HTTPCookie>;
    #endif
    Einfach vor template
    Code:
    using namespace std;
    eintragen löst das Problem nicht, weil ja der Definition des namespaces von cgicc die std fehlt.

    Hat jemand eine Idee, wie man das Problem fixen bzw. ganz simpel cgicc bauen kann?
    Hinreichend hoch entwickelte Wissenschaft ist von echter Magie nicht zu unterscheiden! - Terry Pratchett

  2. #2
    Moderator
    Nothing is unbreakable!

    Registriert seit
    Jul 2003
    Beiträge
    622
    Renommee
    819

    Re: gnu CGI (cgicc) v3.2 und Win32

    Code:
    HTMLElement.cpp: In member function 'bool cgicc::HTMLElement::operator==(const c
    gicc::HTMLElement&) const':
    HTMLElement.cpp:74: error: 'strcmp' was not declared in this scope
    Zumindest der Fehler sollte sich leicht mit einem #include <cstring> und dem std Namespace lösen lassen.

  3. #3
    Registered User
    Registriert seit
    Feb 2004
    Beiträge
    800
    Renommee
    756

    Re: gnu CGI (cgicc) v3.2 und Win32

    retak: wohl auch nur ein folgefehler.
    std ist überall das problem :(

    kirsche: eine "gruselige" idee finde ich hier:
    http://article.gmane.org/gmane.comp..../match=windows

    er will selber hand anlegen (ok, soviele dateien sind es nun nicht).

    stimmt deine compilerversion?
    GNU cgicc requires an ANSI-compliant C++ compiler supporting the C++ standard template library. cgicc is primarily developed on GNU/Linux using gcc version 3.3, but it has been built using the following compilers:

    * gcc versions 2.8.1 and greater
    * Hewlett-Packard aCC
    * Microsoft Visual C++ 6.0
    * Borland C++ Builder 5.0

    Project files for MSVC++ are included in the distribution.
    theoretisch sagen sie, sie compilen mit gnu make cross. hmm... die mailingliste ist auch schon etwas älter...

    hab leider kein windows zum testen...

  4. #4
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    47
    Renommee
    10

    Re: gnu CGI (cgicc) v3.2 und Win32

    Danke erstmal für die schnelle Reaktion!

    Also meine Toolchain besteht aus den separat installierten
    • eclipse-cpp-helios-SR1-win32 und
    • mingw-get-inst-20101030 (gcc v4.5.0)

    Wascana (Eclipse+MinGW-Paket) hat selber massive Indexer-Probleme, so dass ich diese Toolchain erst gar nicht nutzen kann, ohne noch zusätzlich tiefer in die Eclipse Eingeweide abzutauchen. Code::Blocks schmeißt mir den selben Fehler:
    Code:
    ..\cgicc\CgiEnvironment.h|52|error: explicit instantiation of 'class std::vector<cgicc::HTTPCookie>' in namespace 'cgicc' (which does not enclose namespace 'std')|
    Abgesehen davon gebe ich elise Recht. Ich halte das Problem auch für einen Folgefehler.

    Was mich aber am meißten verwirrt ist die Tatsache, dass der Compiler sich einerseits darüber beschwert, dass std-Klassen mittels std:: dereferenziert gerufen werden und andererseits gleichzeitig anmeckert, dass der namespace std nicht in cgicc deklariert wäre. Der Sinn namespaces zu nutzen liegt doch gerade darin, dass man dann nicht mehr die Klassen dereferenzieren muss. Die Fehlermeldung ergibt für mich daher gar keinen Sinn. Oder interpretiere ich hier die Fehlermeldung falsch?
    Hinreichend hoch entwickelte Wissenschaft ist von echter Magie nicht zu unterscheiden! - Terry Pratchett

  5. #5
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    47
    Renommee
    10

    Re: gnu CGI (cgicc) v3.2 und Win32

    Leider sind die 30min schon rum, so dass ich mein Post nicht mehr editieren kann. Daher kippe ich hier mal noch ein paar Zusatzinfos in einem neuen Post ab.

    Ich habe soeben gcc v3.4.5 in MinGW installiert. Jetzt gibt es ein völlig anderes Fehlerbild. Automake wirft folgenden Fehler:
    Code:
    HTMLAttributeList.cpp:51: internal compiler error: in rest_of_handle_final, at toplev.c:2067
    Please submit a full bug report, with preprocessed source if appropriate.
    Wenn ich mit eigenem Makefile rangehe bekomme ich folgendes:
    Code:
    internal compiler error:
    in rest_of_handle_final, at toplev.c:2067	HTMLAttributeList.cpp	/cgicc/cgicc	line 43
    Hinreichend hoch entwickelte Wissenschaft ist von echter Magie nicht zu unterscheiden! - Terry Pratchett

  6. #6
    Registered User
    Registriert seit
    Feb 2004
    Beiträge
    800
    Renommee
    756

    Re: gnu CGI (cgicc) v3.2 und Win32

    Zitat Zitat von retak Beitrag anzeigen
    Code:
    HTMLElement.cpp: In member function 'bool cgicc::HTMLElement::operator==(const c
    gicc::HTMLElement&) const':
    HTMLElement.cpp:74: error: 'strcmp' was not declared in this scope
    Zumindest der Fehler sollte sich leicht mit einem #include <cstring> und dem std Namespace lösen lassen.

    retak, da muss ich abbitte leisten... zwar läuft mein gcc hier einfach durch, und kompiliert mir die bibliothek hervorragend ohne probleme (ist kein windows), aber.. ich habe mir die htmlemelent.cpp grad genauer angeschaut: die cstring ist drin, jedoch fehlt der namespace std.
    nun sind bei vielen compilern hier "dreckigheiten", heißt: wie bei meiner version hier hat er die cstring im globalen und im std (ist ja von haus aus die string.h).

    aber es könnte sein, dass der windows gcc mal richtig nach vorschrift die cstring "nur" in den std gelegt hat, steht wohl auch so im standard.

    also kirsche, doch mal hand anlegen, und in der htmlelements.cpp das std zufügen, und dann weiterschaun mit dem cygwin. (std::strcmp)

    sorry, retak :)

    ps: mich wunderte grad nämlich im vergleich mit meiner kompilierungsausgabe, warum er erst an dieser stelle hängt. das std problem wäre vorher schon aufgetaucht... schaun wir mal, was jetzt für probleme auftauchen ;)
    Geändert von elise (01.02.2011 um 21:59 Uhr)

  7. #7
    Moderator
    Nothing is unbreakable!

    Registriert seit
    Jul 2003
    Beiträge
    622
    Renommee
    819

    Re: gnu CGI (cgicc) v3.2 und Win32

    Kein Ding :)
    Hab mal eben in meine cstring geschaut. Erst werden Macros aus string.h unwirksam gemacht und dann alle Funktionen im std Namespace aufgeführt. Nun in der string.h hab ich zwar die Macros nicht gefunden aber gut.
    Also bei mir gibt es keine global verfügbaren string Funktionen. Linux gcc 4.3.2

  8. #8
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    47
    Renommee
    10

    Re: gnu CGI (cgicc) v3.2 und Win32

    Mir fällt gerade auf, dass ich mir / die Board-SW mein erstes Post bei irgend einem Edit zerschossen habe/hat. Ihr habe mich schon gewundert, warum ich das std:: denn ergänzen soll. Das ist nämlich genau dort, wo es hingehört:
    CgiEnvironment.h
    Code:
    #include <string>
    #include <vector>
    #include <cstdlib>
    
    #include "cgicc/CgiDefs.h"
    #include "cgicc/CgiUtils.h"
    #include "cgicc/CgiInput.h"
    #include "cgicc/HTTPCookie.h"
    
    namespace cgicc
    {
    #ifdef WIN32
    	template class CGICC_API std::vector<HTTPCookie>;
    #endif
    ...
    Sprich, der Compiler mault eine dereferenzierte Klasse an. Warum er vector nicht findet, obwohl das oben noch im CgiEnvironment.h eingehängt wird ist mir schleierhaft.

    Jetzt könnte man vermuten, dass es am CGICC_API liegt. Aber das wird gerade im CgiDefs.h definiert:
    Code:
    ...
    #ifdef WIN32
    
    // export library symbols
    #  ifdef CGICC_EXPORTS
    #    define CGICC_API __declspec(dllexport)
    #  else
    #    define CGICC_API __declspec(dllimport)
    #  endif
    ...
    Kann es sein, dass __declspec Microsoft-spezifisch ist?
    Geändert von kirsche40 (01.02.2011 um 22:59 Uhr) Grund: Ergänzung
    Hinreichend hoch entwickelte Wissenschaft ist von echter Magie nicht zu unterscheiden! - Terry Pratchett

  9. #9
    Administrator
    Registriert seit
    Apr 2004
    Beiträge
    754
    Renommee
    1274

    Re: gnu CGI (cgicc) v3.2 und Win32

    Zitat Zitat von kirsche40 Beitrag anzeigen
    Kann es sein, dass __declspec Microsoft-spezifisch ist?
    Ja. Bist du sicher, dass deine Toolchain richtig ist und das Ding mit deinem Compiler ueberhaupt bauen sollte?

  10. #10
    Registered User
    Registriert seit
    Feb 2001
    Beiträge
    47
    Renommee
    10

    Re: gnu CGI (cgicc) v3.2 und Win32

    Es gibt Neuigkeiten. Zuerstmal zum __declspec(). Das kommt wirklich aus der Microsoft-Welt. Aber es wird im gcc mittlerweile unterstützt.

    Nun zum Problem selber. Ich habe mich weiter im Netz umgeschaut und bekam auch Schützenhilfe von einem sehr guten Freund. Mittlerweile kann ich durch folgende Änderungen eine statische Lib erzeugen und auch gegen diese eine Exe bauen.

    Ein Tip hat mich erstmal auf die Idee gebracht die explizite Erzeugung der Templates hinter den deklarierten namespace cgicc auszulagern. Dazu mußte ich die Header
    Code:
    Cgicc.h
    CgiEnvironment.h
    HTMLAttributeList.h
    HTMLElementList.h
    anpassen.

    Als nächstes bin ich beim rumfriemeln darauf aufmerksam geworden, dass irgend etwas am Präprozessor nicht stimmt. Trotz Schalter -DCGICC_EXPORTS wird manchmal der falsche #else-Zweig verwendet. Im Export-Makro in CgiDefs.h habe ich den Part
    // export library symbols
    # ifdef CGICC_EXPORTS
    # define CGICC_API __declspec(dllexport)
    # else
    # define CGICC_API __declspec(dllimport)
    # endif
    entfernt und durch
    Code:
    #    define CGICC_API __declspec(dllexport)
    ersetzt.

    Schlussendlich habe ich an den Compiler-Schaltern "-DWIN32 -DCGICC_EXPORTS -DHAVE_CONFIG_H -I.. -O0 -g3 -Wall -c -fmessage-length=0 -std=gnu++98" rumgedreht. Wichtig ist vor allem -std=gnu++98. Ohne die GNU-Erweiterungen zum 98er-Standard will der gcc keine referenzierbaren Symbole unter Verwendung von __declspec() in die statische Library einbauen. Die Symbole werden einfach nicht gefunden. Warum das bei einer statischen Bibliothek überhaupt ein Problem sein kann ist mir schleierhaft, da die Objekt-Dateien mit vorhandenen Symbolen nach meinem bisherigen Kenntnisstand ja nur mittels ar zusammen in eine libcgicc.a gepackt werden.

    Jetzt zu meinen Fragen:
    1) Wie kommt es dazu, dass ein CGICC_EXPORTS plötzlich nicht mehr definiert ist und somit ein paar Symbole nicht exportiert werden? Es gibt kein #undef CGICC_EXPORTS und auch kein -UCGICC_EXPORTS.

    2) Wie kommt es, dass ich die GNU-Extensions verwenden muss? Ich dachte die die Defaults sind für gcc allgemein festgelegt.

    3) Warum muss ich __declspec(dllexport) verwenden, wo ich doch gar keine dynamische, sondern eine statische Bibliothek verwende?

    4) Wieso reicht es nicht aus die Objektdateien als statische Bibliothek zur Verfügung zu stellen? Oder anders, warum werden die Symbole nicht gefunden?

    5) Warum wird im ursprünglichen Code "implicit template instantiation and vague linkage" statt "explicit template instantiation" verwendet? Was sind die Vorteile/Nachteile?
    Hinreichend hoch entwickelte Wissenschaft ist von echter Magie nicht zu unterscheiden! - Terry Pratchett

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. net::ssh::perl && win32
    Von phantom111 im Forum PHP, Perl und ASP
    Antworten: 0
    Letzter Beitrag: 14.12.2005, 09:54
  2. Socketprogrammierung WIN32 - C++
    Von NoRiskNoDisk im Forum C / C++
    Antworten: 1
    Letzter Beitrag: 20.04.2005, 17:06
  3. Win32 Exploiting
    Von master2000 im Forum (In)Security allgemein
    Antworten: 10
    Letzter Beitrag: 17.12.2004, 08:15
  4. [Win32]Eingabe ?
    Von Gruad im Forum Algorithmen und sonstige Programmiersprachen
    Antworten: 4
    Letzter Beitrag: 08.05.2002, 20:26
  5. Problem mit Win32-API
    Von NuLlK3Y im Forum VisualBasic / VBScript
    Antworten: 0
    Letzter Beitrag: 09.05.2001, 15:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •