cannot find -lxxx
-
Also verstehe ich das richtig, dass die Library als Code voliegt?
Also ich weiss ja nicht, was das für eine Library ist, aber notfalls könntest du, wenn du den gesamten Code hast die ja auch direkt dem Projekt hinzufügen und dann mit dem Projekt builden. Dann hast du halt keine .dll oder so mehr, sondern direkt in einem, aber wenn die Lib nicht all zu gross ist sollte das kein Problem sein.
-
Die Library besteht in großen Teilen aus *.h und *.cpp Dateien und ist insgesamt mehr als 5 MB groß.
Kann man die nicht zentral irgendwie builden und dann in verschiedenen Projekten verwenden? Wie würde der build funktionieren und wie kann ich den Librarynamen definieren?
-
Finde ich komisch, dass ihr die Library selbst builden müsst.. Liegt den darin der eigentliche Auftrag, oder was?
Um dll's zu erstellen schau mal hier:
http://msdn.microsoft.com/de-de/library/ms235636(VS.80).aspxHier gibts auch was:
http://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=6200
-
erstmal danke für die Links.
Verstehe ich das richtig und es MUSS eine *.dll Library für C++ vorliegen? Dann fände ich es auch komisch....
Aus der readme der Library ist nachfolgendes zu entnehmen:
"There is no installation procedure for xxx, at least not in
this version. To use xxx in your projects choose the respective
folder that fits your needs best (Gcc on Unix and Linux systems, Msvc
or Msvc7.1 on windows), build the library and finally set-up your
project to use the library."Ich nutze Windows und Eclipse. Einen Ordner Msvc bzw. Msvc7.1 gibt es nicht. Lediglich einen Ordner "Visual Basic" (egal welche Version der Library). Im Ordner GCC befinden sich jede Menge Makefiles (u. a. library.make). Das geht aber wohl nur unter Linux, korrekt?
Seitens der Dozenten wurde aber nie etwas von wegen "bitte nur Linux Nutzer" gesagt, sondern sogar explizit Windows/Eclipse als mögliche IDE genannt...
-
Eine Library ist eigentlich ein abstrakter Begriff und hat mal nichts mit irgendwelchen Dateien zu tun. (Das heisst, dass sie durchaus auch einfach als Source Code mitkompiliert wird, wie zum Beispiel ein Teil der Standardbibliothek von C++)
Ein anderer möglicher weg ist natürlich die .dll, welche ein paar Vorteile bringt, aber es muss nicht unbedingt das sein, aber durchaus ein gängiger Weg unter Windows.
Obwohl das hier:
build the library and finally set-up your
project to use the libraryDoch recht stark danach klingt, dass man zuerst eine dynamische Version (.dll unter Windows und .so unter Unix) und dann das Programm darauf einstellt, dass es die Library benutzt.
Sprich ich würde dier empfehlen zu probieren die Bibliothek zu einer .dll zu kompilieren und dann dann in den Projekteinstellungen diese zu linken zu lassen.
-
um die "Katze aus dem Sack" zu lassen, da ich mir bzgl. Dll nicht sicher bin, bzw. ich jetzt nicht glauben kann, dass ich auch noch Visual installieren muss: es handelt sich hierbei um die OdemX Library:
https://www2.informatik.hu-berlin.de/sam/lehre/tools/odemx/
und im Besonderen um die Version: 2.2
Ich wäre sehr dankbar, wenn mir da nochmal jemand ein Feedback geben könnte!
-
Also ich habe es mir jetzt mal kurz angeschaut.
Für Windows hat es ganz schön die Projekt Files, die man einfach öffnen und benutzen kann, um das Projekt zu builden. (sogar sehr schön ohne eine einzige Warning. :))
Für den GCC hast du ja die makefiles, also musst du da eigentlich auch nichts anderes machen, als diese Auszuführen. (Ich kenne mich mit dem GCC nicht so aus, aber sollte auch recht einfach sein).
Ich habe dir mal die builds für Windows raufgeladen:
http://dl.dropbox.com/u/1716912/odemx.rarAllerdings scheint es so, dass die Bibliothek statisch gelinkt werden soll. (.lib). Das heisst, dass der Code nicht dynamisch geladen wird, sondern du ihn bei der Kompilierung direkt auch in die exe mit rein bekommst.
-
Danke! Werds gleich ausprobieren.
wie hast du die libs erzeugt?
-
Doppelklick auf "odemxAll.sln" und F7.

Ich habs mit Visual Studio gemacht, sollte aber auch mit der Express Version (gratis gehen).
Obwohl als Student kannst du dir die Voll Version auch ganz legal laden:
https://www.dreamspark.com/Products/ProductList.aspx
-
Ich habe ein ähnliches Problem bei odemx. Ich konnte es unter VS kompilieren, habe auch ein einfaches Programm schreiben können, das sich auch ohne Murren erstellen lässt (libs eingebunden, richtiges include-Verzeichnis):
#include <odemx/odemx.h> int main(int argc, char* argv[]) { Simulation* sim = odemx::getDefaultSimulation(); }Sobald ich aber komplexeren Code habe, klappt's nicht mehr. Wenn ich z.B. das "SimpleProtocol" öffne und erstellen lasse, erhalte ich 17 Fehler. Hier mal die ersten zwei:
Fehler 1 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall odemx::Event::scheduleAt(__int64)" (?scheduleAt@Event@odemx@@QAEX_J@Z)" in Funktion ""public: void __thiscall SimpleProtocolSimulation::scheduleMessageEvent(class odemx::ProtocolStack *,class odemx::ProtocolStack *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,__int64)" (?scheduleMessageEvent@SimpleProtocolSimulation@@QAEXPAVProtocolStack@odemx@@0V?char_traits@D@std@@V?$allocator@D@2@@std@@_J@Z)". SimpleProtocol.obj SimpleProtocol
Fehler 2 error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual __int64 __thiscall odemx::Event::getExecutionTime(void)const " (?getExecutionTime@Event@odemx@@UBE_JXZ)". SimpleProtocol.obj SimpleProtocol
Was mache ich falsch? Alle 8 libs sind gelinkt?!