Bibliothek benutzen



  • Hi,

    bin Neuling in C++ und Visual Studio (2010) und möchte in meinem Projekt eine fremde Bibliothek benutzen. Ob dynamisch oder statisch ist mir erstmal egal. Ich hab eine CD mit einem Ordner der die Dateien:

    dllmain.c, flint.def,flint.dll,flint.lib, makedll.bat enthält.

    Ich habe in diesem Ordner also keine .h datei. Davon befinden sich aber verschiedene in anderen Ordnern die ebenfalls auf der CD enthalten sind(u.a flint.h)

    Kann mir jemand, möglichst ausführlich sage, wie ich die Bibliothek benutzen kann ?
    Vielen Dank für die Hilfe



  • Und Du bist dir sicher, dass Du das mit C++/CLI machen möchtest? Mach nämlich keinen Sinn...

    Die Library ist AFAIK native, also würde ich sie auch native benutzen.

    ➡ falsches Forum.

    Simon

    [EDIT]

    Kann mir jemand, möglichst ausführlich sage, wie ich die Bibliothek benutzen kann ?

    (Gibt eine Doku zur Library - auf dem Internet z.B.? Würde helfen.)

    Ansonsten:
    1. Erzeuge ein Unterordner flint in deinem Projekt Ordner
    2. Kopiere dorthin die flint.h, flint.lib, flint.dll
    3. Füge bei den Projekt Settings unter C/C++ > General > Additional Include Directories den Pfad flint hinzu
    4. Füge bei den Projekt Settings unter Linker > General > Additional Library Directories den Pfad flint hinzu
    5. Füge bei den Projekt Settings unter Linker > Input > Additional Dependencies den Eintrag flint.lib hinzu
    6. In deinem Projekt benutzt Du nun

    #include <flint.h>
    

    um das Header File einzubinden. Du kannst jetzt auf die Funktionalität der Library zugreifen.

    Hinweis:
    Die obengenannten Einstellungen musst Du für jede Configuration (Debug, Release, ...) separat machen. Als Einstieg reicht mal Debug.



  • Hi simon,
    ich muss zugeben dass ich einfach nach ähnlichen Threads im Forum gesucht hab und daher hier meine Frage gestellt. Das war wohl nicht klug, entschuldige. Wenn du mir sagen könntest welches Forum geeignt ist, dann pack ich mein Sachen und zieh weiter : )



  • Mättes31245 schrieb:

    Hi simon,
    ich muss zugeben dass ich einfach nach ähnlichen Threads im Forum gesucht hab und daher hier meine Frage gestellt. Das war wohl nicht klug, entschuldige. Wenn du mir sagen könntest welches Forum geeignt ist, dann pack ich mein Sachen und zieh weiter : )

    Kein Problem. Ich denke Rund um die Programmierung wäre gut... lass nur, ein Moderator soll dich verschieben.

    BTW: Siehe mein Edit im letzten Beitrag.



  • Danke für die schnelle Hilfe. Die Bibliothek is übrigens aus dem Buch http://www.welschenbach.de/Cryptography/index.html. Dort ist zwar eine Dokumentation über die Inhalte der Bibliothek(pseudocode). Allerdings finde ich weder in dem Buch noch auf der Website Hinweise wie man die Bib einbindet.

    Bin jetzt soweit, dass flint.h korrekt includiert wird. Leider kann noch nicht auf die gewünschten Inhalte der Bibliothek zugreifen. Die CD enthält aber auch noch weitere Header.

    Bin beeindruckt wie schnell einem hier geholfen wird!



  • So, hab mich jetzt auch mal angemeldet.
    Was ich auch nicht verstehe:

    Was sind/meinst du mit Configuration ?



  • Hi. Mir scheints als sei mein Problem gelöst. kann die anderen Header nun auch einfach mit #include einbinden.

    Vielen Dank für die Hilfe



  • Zu früh gefreut : )
    Jetzt bekomm ich folgende Linker-Fehler

    1> Teilnehmer.cpp
    1>ManifestResourceCompile:
    1> Alle Ausgaben sind aktuell.
    1>Test2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int const __cdecl operator==(class LINT const &,class LINT const &)" (??8@YA?BHABVLINT@@0@Z)" in Funktion "_main".

    1>Test2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: class LINT const & __thiscall LINT::operator=(class LINT const &)" (??4LINT@@QAEABV0@ABV0@@Z)" in Funktion "_main".

    1>Test2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""class LINT const __cdecl operator/(class LINT const &,class LINT const &)" (??K@YA?BVLINT@@ABV0@0@Z)" in Funktion "_main".

    1>Test2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""class LINT const __cdecl operator*(class LINT const &,class LINT const &)" (??D@YA?BVLINT@@ABV0@0@Z)" in Funktion "_main".

    1>Test2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall LINT::LINT(int)" (??0LINT@@QAE@H@Z)" in Funktion "_main".

    1>C:\Users\Matthias\Documents\Visual Studio 2010\Projects\extended_Euklid\Debug\RSA.exe : fatal error LNK1120: 5 nicht aufgelöste externe Verweise.
    1>
    1>Fehler beim Erstellen
    1>
    1>Verstrichene Zeit 00:00:02.51
    ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen =========

    Kann mir jemand sagen wie ich rausfinden kann was das bedeutet ?



  • Was benutzt Du für eine IDE?
    Meine Anleitung war für Visual Studio (2010).
    Gibt übrigens in der Express Edition gratis!

    Simon



  • Jep, benutze auch Visual Studio 2010.



  • Kann mir jemand sagen wie ich rausfinden kann was das bedeutet ?

    Die Fehler bedeuten, dass die Definition (in der Lib) der entsprechenden Funktionen nicht gefunden wird. Die Deklaration (im Header) wurde gefunden.

    Ein Bsp:

    1>Test2.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __thiscall LINT::LINT(int)" (??0LINT@@QAE@H@Z)" in Funktion "_main".

    Im File Test2.cpp, welches zu Test2.obj kompiliert wird, gibts ein Objekt vom Type LINT, welches den Konstruktor mit einem int Argument aufruft.
    Etwa so:

    LINT lint(23);
    

    Die Definition des Konstruktors wird nun nicht gefunden. Das kann bedeuten, dass die Library falsch benutzt wird, sie nicht gefunden wird, etc.

    Zeige mal deinen Bsp. Code - ich hoffe er ist entsprechend klein.



  • hey. kann übers we nicht an den code ran. werde ab montag aufjedenfall weiter dran arbeiten

    wünsche ein schönes wochenende
    gruß mättes



  • gute morgen, hier der zugehörige Quellcode:
    (reine Spielerei. Teilnehmer.h und Support.h sind von mir erstellte Header(auch die Namespaces). Zu der Bibliothek die ich benutzen will gehören die anderen Header)

    #include "Teilnehmer.h"
    ##include "Teilnehmer.h"
    #include "Support.h"
    #include "flint.h"
    #include "flintpp.h"
    #include "_assert.h"
    #include "kmul.h"
    #include "ripemd.h"
    using namespace Teilnehmer;
    using namespace RSA_maths;
    using namespace Translate;
    
    int main()
    {
    	int i = 234232;
    	LINT k (i);
    	LINT j = 10000 * k;
    	j = j / 10000;
    	keep_window_open();
    }
    

    Mich würde mittlerweile auch ein guter Literaturtipp für VisualStudio interessieren.

    mfg mättes



  • Hier ein Teil der Dokumentation der Bibliothek:

    The cdrom contains the following directories and files:

    Directory files Description
    --------- ----- -----------
    flint/src:

    flint.c C functions for arithmetic and number theory
    flint.h Header file for flint.c
    kmul.c Karatsuba multiplication
    kmul.h Header file for kmul.c
    _assert.h Header file with dummy assertion macros
    ripemd.c Implementation of the hash function RIPEMD160
    ripemd.h Header file for ripemd.c
    flintpp.cpp Implementation of the arithmetic class LINT
    flintpp.h Header file for flintpp.cpp

    flint/src/asm:

    mult.asm Multiplication function mult() in 80x86 assembler
    umul.asm Multiplication function umul() in 80x86 assembler
    sqr.asm Squaring function sqr() in 80x86 assembler
    div.asm Division function div_l() in 80x86 assembler

    flint/lib:

    flinta.lib Library providing the objectcode of the assembler
    functions in OMF format for usage under DOS,
    Windows, OS/2
    flintavc.lib Library providing the objectcode of the assembler
    functions in COFF format for usage with lcc-win32,
    Microsoft Visual C/C++ and other environments
    flinta.a Archive providing the objectcode of the assembler
    functions for usage with emx/gcc under OS/2 and
    Windows (9x, NT)
    libflint.a Archive providing the objectcode of the assembler
    functions for usage with gcc under LINUX (on Pentium
    or compatible hardware platforms)

    flint/lib/dll:

    flint.dll Dynamic Link Library (DLL) providing the C functions
    and data of the FLINT/C package (developed with
    Visual C/C++ V. 6.0)
    flint.def FLINT/C symbols that are exported by flint.dll
    flint.lib COFF import library for flint.dll
    makedll.bat Batch file for the generation of flint.dll and
    flint.lib under Visual C/C++
    dllmain.c Function for initialization of flint.dll



  • Ich nehme an, dass die dir vorliegende Version der flint.lib und flint.dll mit VC++6.0 (uralt) erstellt wurden - das passt nicht zu VS2010.

    Du könntest versuchen, dass flint Projekt auch mit VS2010 zu builden. Oder gar keine Library machen, sondern den Code direkt in dein Projekt einbinden.

    Simon



  • Hi. Dann versuch ich vielleicht einen anderen Weg zum Ziel.
    Was ich brauche ist einfach einen Datentyp der mit große Zahlen in Visualc++ bereitstellt.
    Habe das auch mal mit MPIR(http://www.mpir.org/) und dieser: https://mattmccutchen.net/bigint/ versucht.
    Aber am Einbinden bin ich bisher immer gescheitert. Falls es noch andere(einfachere) Bibliotheken für großen Zahlen in Visualc++ gibt, würde ich die auch mal ausprobieren. Dabei is mir wohl Usability viel, viel wichtiger als Perfomance : )



  • Ok.

    Hier wäre noch eine Alternative die ev. ein wenig einfacher einzubinden ist: http://sourceforge.net/projects/cpp-bigint/

    Ansonsten musst Du halt konkrete Fragen stellen.

    Simon


Anmelden zum Antworten