Statische Library einbinden [Google Snappy]

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Statische Library einbinden [Google Snappy]

Beitrag von cxAlex »

Ich versuche die Google Snappy Kompressionsbiblithek als statische Library in PB zu importieren. Zum erstellen der Library nutze ich Code::Blocks und den C Source von Google. Wenn ich das ganze als dynamische Bibliothek (DLL) einbinde klappt alles wie es soll aber als statische bekomme ich haufenweise Polink - Fehler beim Import:
POLINK: error: Unresolved external symbol '__ZNSt8ios_base4InitD1Ev'.
POLINK: error: Unresolved external symbol '__ZSt4cerr'.
POLINK: error: Unresolved external symbol '__ZNSo3putEc'.
POLINK: error: Unresolved external symbol '__ZNSo5flushEv'.
POLINK: error: Unresolved external symbol '__ZNKSt5ctypeIcE13_M_widen_initEv'.
POLINK: error: Unresolved external symbol '__ZSt16__throw_bad_castv'.
POLINK: error: Unresolved external symbol '__Unwind_Resume'.
POLINK: error: Unresolved external symbol '__ZNSsC1EPKcRKSaIcE'.
POLINK: error: Unresolved external symbol '__ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i'.
POLINK: error: Unresolved external symbol '__Znaj'.
POLINK: error: Unresolved external symbol '__ZNSsD1Ev'.
POLINK: error: Unresolved external symbol '__ZdaPv'.
POLINK: error: Unresolved external symbol '__ZNSs6resizeEjc'.
POLINK: error: Unresolved external symbol '__ZNSs12_M_leak_hardEv'.
POLINK: error: Unresolved external symbol '__ZNSt8ios_base4InitC1Ev'.
POLINK: error: Unresolved external symbol '___gxx_personality_v0'.
POLINK: error: Unresolved external symbol '__ZdlPv'.
POLINK: error: Unresolved external symbol '___cxa_pure_virtual'.
POLINK: error: Unresolved external symbol '__ZTVN10__cxxabiv120__si_class_type_infoE'.
POLINK: error: Unresolved external symbol '__ZTVN10__cxxabiv117__class_type_infoE'.
POLINK: fatal error: 20 unresolved external(s).
Muss ich etwas beachten wenn ich die Lib erstelle, bzw. ist das ein PB Fehler?

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Statische Library einbinden [Google Snappy]

Beitrag von DrShrek »

Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Re: Statische Library einbinden [Google Snappy]

Beitrag von cxAlex »

Hm... und von wo kriege ich diese geupdateten lib-Dateien?

bzw. wo kann ich dieses "/D__iob_func=__p__iob" in meinen Code::Blocks Einstellungen hinzufügen, ich finde da nichts wie "preprocessor lines".?

Gruß, Alex
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Statische Library einbinden [Google Snappy]

Beitrag von DrShrek »

Sorry. Zu den Code::Blocks Link Fehlern kann ich leider keine sichere Lösung anbieten.
Ich selbst verwende Visual Studio.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Re: Statische Library einbinden [Google Snappy]

Beitrag von edel »

Auf Realsource findest du "sil.exe", damit kannst du bequem nach Symbolen suchen.
Als Platzhalter kann man * benutzen.

http://realsource.de/index.php/download ... or-pb-libs

Alternativ kannst du mal mit dem Schalter /MT herumspielen.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Re: Statische Library einbinden [Google Snappy]

Beitrag von jpd »

Hallo,
kämpfe gerade mit änliche probleme..
polink error und so wieter und so fort.

habe auch diesen eintrag von Fred gelesen
add this preprocessor line to your compiler

"/D__iob_func=__p__iob"
aber mir ist überhaupt nicht klar wie es verwendet wird.

oder hier hat edel geschrieben:
Alternativ kannst du mal mit dem Schalter /MT herumspielen.
ich würde gerne rumspielen. :-)

Aber wie? :oops:

Vielen Dank
jpd
PB 5.10 Windows 7 x64
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Statische Library einbinden [Google Snappy]

Beitrag von Danilo »

cxAlex hat geschrieben:Ich versuche die Google Snappy Kompressionsbiblithek als statische Library in PB zu importieren. Zum erstellen der Library nutze ich Code::Blocks und den C Source von Google. Wenn ich das ganze als dynamische Bibliothek (DLL) einbinde klappt alles wie es soll aber als statische bekomme ich haufenweise Polink - Fehler beim Import:
POLINK: error: Unresolved external symbol '__ZNSt8ios_base4InitD1Ev'.
POLINK: error: Unresolved external symbol '__ZSt4cerr'.
POLINK: error: Unresolved external symbol '__ZNSo3putEc'.
POLINK: error: Unresolved external symbol '__ZNSo5flushEv'.
POLINK: error: Unresolved external symbol '__ZNKSt5ctypeIcE13_M_widen_initEv'.
POLINK: error: Unresolved external symbol '__ZSt16__throw_bad_castv'.
POLINK: error: Unresolved external symbol '__Unwind_Resume'.
POLINK: error: Unresolved external symbol '__ZNSsC1EPKcRKSaIcE'.
POLINK: error: Unresolved external symbol '__ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i'.
POLINK: error: Unresolved external symbol '__Znaj'.
POLINK: error: Unresolved external symbol '__ZNSsD1Ev'.
POLINK: error: Unresolved external symbol '__ZdaPv'.
POLINK: error: Unresolved external symbol '__ZNSs6resizeEjc'.
POLINK: error: Unresolved external symbol '__ZNSs12_M_leak_hardEv'.
POLINK: error: Unresolved external symbol '__ZNSt8ios_base4InitC1Ev'.
POLINK: error: Unresolved external symbol '___gxx_personality_v0'.
POLINK: error: Unresolved external symbol '__ZdlPv'.
POLINK: error: Unresolved external symbol '___cxa_pure_virtual'.
POLINK: error: Unresolved external symbol '__ZTVN10__cxxabiv120__si_class_type_infoE'.
POLINK: error: Unresolved external symbol '__ZTVN10__cxxabiv117__class_type_infoE'.
POLINK: fatal error: 20 unresolved external(s).
Muss ich etwas beachten wenn ich die Lib erstelle, bzw. ist das ein PB Fehler?

Gruß, Alex
Diese Symbole sehen nach GNU C++ aus und sind nicht kompatibel
zu MS VC++. Da PB die MSVCRT einbindet, wäre es besser mit einem
kompatiblem Compiler zu erstellen.
Wenn Du Dein Paket zu Verfügung stellst (hochladen oder private eMail),
kann ich Dir anbieten es mit MS VC++ oder Intel C++ zu erstellen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Re: Statische Library einbinden [Google Snappy]

Beitrag von DrShrek »

Und wenn Du mir dein Packet hochlädst...erstelle ich dir eine fertige statische Lib inkl. Strukturen und Wrapper, ahnlich wie bei den Chipmunk4PB Wrapper (der ist auch von mir).

Ich habe mir ein Tool geschrieben das die Sourcen durchsucht und einen <LibName>4PB Wrapper teilautomatisiert erstellt.
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Statische Library einbinden [Google Snappy]

Beitrag von Danilo »

DrShrek hat geschrieben:Und wenn Du mir dein Packet hochlädst...erstelle ich dir eine fertige statische Lib inkl. Strukturen und Wrapper, ahnlich wie bei den Chipmunk4PB Wrapper (der ist auch von mir).

Ich habe mir ein Tool geschrieben das die Sourcen durchsucht und einen <LibName>4PB Wrapper teilautomatisiert erstellt.
Genau, übernimm Du das. :)

Den Source gibts auf der Seite, lässt sich kompilieren.
Beispiel:

Code: Alles auswählen

ImportC "Snappy.lib"
    snappy_compress(*pIn,len,*pOut,*compressedLength)
EndImport

A$ = "Hallo Welt"
B$ = Space(100)

snappy_compress(@A$,Len(A$),@B$,@len)
Beispiel 2, String packen und wieder entpacken:

Code: Alles auswählen

ImportC "Snappy.lib"
    snappy_compress  (*input,input_length.i,*compressed,*compressed_length.Integer)
    snappy_uncompress(*compressed,compressed_length.i,*uncompressed,*uncompressed_length.Integer)
    snappy_max_compressed_length(source_length.i)
    snappy_uncompressed_length(*compressed,compressed_length.i,*result.Integer)
    snappy_validate_compressed_buffer(*compressed,compressed_length.i)
EndImport

A$ = "Compress me, snappy! This is sooo cool!"
    
len.i = StringByteLength(A$)
        
required_len.i = snappy_max_compressed_length(len)

If OpenConsole()
    PrintN("output start")
    PrintN(Str(len))
    PrintN(Str(required_len))
    
    *buffer = AllocateMemory(required_len)
    If *buffer
        x = snappy_compress(@A$,len,*buffer,@required_len)
        PrintN(Str(x))
        x = snappy_uncompressed_length(*buffer,required_len,@result.Integer)
        PrintN(Str(x))
        PrintN(Str(result\i))
        B$ = Space(result\i)
        x = snappy_uncompress(*buffer,required_len,@B$,@result.Integer)
        PrintN(Str(x))
        PrintN(Str(result\i))

        PrintN(B$)
    EndIf
    Input()
    CloseConsole()
EndIf
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Statische Library einbinden [Google Snappy]

Beitrag von Danilo »

@cxAlex:
Hast Du es jetzt hinbekommen? Ich habe gerade folgendes gesehen:
Windows SDK for Windows 7 and .NET Framework 3.5 SP1

Released in August 2009, this SDK provides Windows 7 headers, libraries, documentation, samples,
and tools (including VS 2008 SP1 C++ compilers) to develop applications for Windows 7, Windows XP,
Windows Server 2003, Windows Vista, Windows Server 2008, and .NET Framework versions 2.0, 3.0, and 3.5 SP1.
It is available in ISO and Web setup form.
Download: http://msdn.microsoft.com/de-de/windows/ff851942.aspx

Habs jetzt nicht überprüft, aber hab auch an anderen Stellen im Internet
gelesen, daß das SDK die C++ Compiler enthält.

Damit solltest Du dann snappy erstellen und nutzen können.
Bei mir gehts, nur werden dazu libcmt.lib und libcpmt.lib benötigt,
die ich nicht einfach weitergeben kann. In dem obigen SDK sollten
diese Libs enthalten sein, so daß Du Dir damit selbst C/C++ Libs
kompilieren kannst.

Ich habe auch mit MinGW & TDM-GCC alles mögliche probiert, aber
ohne Erfolg. Da die MS C++ Compiler im obigen SDK kostenlos sind,
sollte das eine gute Alternative sein.


EDIT:
Dort ist das aktuelle 'Windows SDK for Windows 7 and .NET Framework 4':
http://blogs.msdn.com/b/windowssdk/arch ... ork-4.aspx

Enthält die neueren VC++ 2010 Compiler (32 & 64-bit).
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Antworten