Statische LIB mit überladenen Funtionen unter VC++
-
Hallo,
danke für die schnelle Antwort. Die Funktion ist im Header deklariert und in der cpp umgesetzt (sorry, wenn jetzt nicht ganz Sprachkonform ausgedrückt). In der Lib sind beim Übersetzen/Erstellen sowohl die *.cpp als auch die *.h eingebunden.
Ich habe die gleiche Lib vorher mal mit Borland übersetzt und da hat es funktioniert.Wegen der dll: Ich hab nen seperaten Outputordner und da legt der halt nur die *.dll rein
Bei mir steht unter den Allgemeinen Optionen -> Ausgabeverzeichnis -> "$(ProjectDir)lib"
Grüßle,
Matthias
-
Hast du im Source vllt irgendwelche Defines stehen, die verhindern, dass der Code kompiliert wird? Hab das eben mal getestet mit ner statischen Lib, da ich die eigentlich fast nie verwende und alles hat geklappt.
void foo(int a); void foo(float b); void foo(double c);
UNd wegen der DLL:
Linker->Erweitert->Importbibliothek->(TargetName).lib
So is das Standard^^ Dort einfach mal auf Standard setzen und kucken was passiert.
rya.
-
Also #defines gibt es da ne ganze Menge aber Du meinst eher die #ifndef usw. oder? Habe da nix gefunden was Codezeilen beim compilieren ausläßt, da die Deklarationen auch gleich untereinander stehen und er dann die oberste ja auch immer kennt. Um es auf Dein Beispiel zu beziehen, er kenn nur foo(int a);
Wegen der dll: Genau so steht es bei mir auch drin aber mit der Endung .dll
Grüßle
-
Letzte Möglichkeit:
Die Lib ist als C-Code kompiliert. In dem Fall hilftextern "C"{ #include "theLib.h" }
Falls das auch nicht hilft, mal bitte Compileroutput posten.
edit: Und am besten auch etwas Code... kommt mir nämlich alles spanisch vor.^^ Normal sollte das anstandslos klappen ;).
DLL:
Änder das auf .lib
rya.
-
Exportierst Du die Funktionen im C- Style oder im C++- Style (mangled names).
Ich schätze mal, wenn Du die Funktionen via C- Style exportierst, werden keine Überladungen zugelassen (wie auch).Edit:
Habe gerade gelesen, dass Dir die *.lib fehlt. Würde tippen, dass Du gar nix exportierst.simon
-
c kennt doch keine überladungen soweit ich weiß, also kann es mit extern "C" auch nciht gehen.
-
Maxi schrieb:
c kennt doch keine überladungen soweit ich weiß, also kann es mit extern "C" auch nciht gehen.
Hmm, keine Ahnung, programmiere kein ANSI-C.
@simon
Die .lib fehlt Ihm bei ner DLL.. das isn anderes Problem
rya.
-
@simon
Die .lib fehlt Ihm bei ner DLL.. das isn anderes Problem
rya.Warum soll das ein andere Problem sein?
Wenn Du nix exportierst, gibts auch keine *.lib, wohl aber eine *.dll.
simon
-
Ist mir echt zu hoch hier...
Also die Lib ist C++, gibt auch Abhängigkeite etc., kann also kein C sein.
Wenn ich da statt dll die Endung auf lib ändere, dann hab ich die gleiche Datei wie vorher nur mit lib
Warum erzeugt der bei mir die anderen Dateien nicht?
Grüßle
-
Also ich glaube du hast deine Projektdateien irgendwie zerschossen....
Leg mal neue Projekte an und änder nur das nötigste wie include-pfade etc. Oder resette alle Einstellungen ausser die nötigen via "Vom Standard/Übergeordnetes Projekt erben" bei der Auswahl.
Und dann probiers nochmal^^. Das is alles zu seltsam um wahr zu sein :D.
rya.
-
Tipp: Verwende den "Dependency Walker" um zu sehen, was die DLL tatsächlich exportiert und wie sie es exportiert.
-
Hm, na dann mal auf ein Neues...
DLL:
Es steht beim Linker -> Erweitert - > Importbib: (TargetName).lib Somit sollte der das doch raffen oder? Oder muss ich erst ne Lib erzeugen und dann ne dll? Wäre mir zwar neu aber man weiß ja nie...Danke Euch erstmal!
Grüßle
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.