Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » unaufgelöstes Externes Symbol

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
24.10.2005, 11:21 Uhr
~Susi
Gast


Hallo Jungs,
ich versuche nun schon seid 1 Woche die JPEG Library unter VC++.net zu kompelieren. Leider bekomme ich immer folgende Fehlermeldeung:


C++:
jpglib error LNK2019: Nicht aufgelöstes externes Symbol '_jpeg_get_small', verwiesen in Funktion '_alloc_small'



in dem Code ist das Jedoch so definiert:


C++:
EXTERN(void*)jpeg_get_small JPP((j_common_ptr cinfo, size_t sizeofobject));


Wieso bekomme ich immer diese Fehlermeldung? (ich bekomme 8 davon und die Lib ist in c)

Danke für eure Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.10.2005, 11:33 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein: Im Code ist nichts definiert, sondern nur deklariert. Das ist ein himmelweiter Unterschied.
Du solltest in deinem Projekt noch die Importlibrary angeben. Wie die heisst, weiß ich nicht, weil ich nicht weiß, welche JPEG Library du nutzt.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.10.2005, 11:59 Uhr
~Susi
Gast


Ok! An der stelle ist es deklariert. Ich kenne aber auch die Stelle an der es definiert ist, denn da kommt der fehler her? Was meinst du mit
Zitat:
Du solltest in deinem Projekt noch die Importlibrary angeben


Ich benutze bzw. will benutzen : jpeg-6b
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
24.10.2005, 14:42 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~Susi:
Ok! An der stelle ist es deklariert. Ich kenne aber auch die Stelle an der es definiert ist, denn da kommt der fehler her

Hm.
Also irgendwie glaube ich, has Du eine andere Vorstellung von dem, was man gemeinhin als Definition bezeichnet. Ich versuchs kurz zu machen:

C++:
int add(int a, int b) {
   return a+b;
}


Das ist eine Definition. Es ist deshalb eine Definition, weil da eine geschweifte Klammer auf und zu geht. Und da drin wird definiert, was die Die Funktion macht. Dagegen ist das hier nur eine Deklaration:

C++:
int add(int a, int b);


Eine Deklaration dient dem Kompiler als Platzhalter. Indem du etwas deklarierst, sagst Du dem Compiler: Es gibt eine Funktion add, die erwartet zwei ints als Parameter und gibt ein int zurück. Da hier keine geschweiften Klammern vorkommen, weiß der Compiler also nur, daß es das Ding gibt, aber nicht, wie es definiert ist.Gemerell werden in .h Dateien nur Deklarationen verwendet, und eben eine solche hast Du vermutlich verwendet.

Wenn Du jetzt das Programm kompilierst, werden verschiedene Schritte ausgeführt, die zwei hier weesentlichen sind der Compileschritt (der Funktioniert bei Dir) und der Linkschritt (der geht bei Dir schief).
Im Compileschritt werden alle .c/.cpp Dateien in .obj Dateien übersetzt. Da kommt also noch keine exe raus, sondern irgendein Zwischending. In diesem Zwischending steht z.B. daß die Funktion add aufgerufen werden soll. Wenn Die Funktion in der gleichen Datei definiert wurde, dann ist alles easy, wenn die Funktion nur deklariert wurde, dann bleibt da zunächst nur ein Platzhalter der sagt: "Hier soll add" aufgerufen werden.

Im Linkschreitt werden - vereinfacht gesprochen - die Platzhalter gefüllt. dh wenn Du add nur deklariert hast, probiert er zu dem add eine Definition zu finden. Findet er sie nicht, kommt eine Meldung wie

Code:
LNK2019: Nicht aufgelöstes externes Symbol 'add', verwiesen in Funktion 'main'


Kommt Dir vermutlich bekannt vor

Okay, und wie kommt der Linker an die Funktionsdefinition? Ganz einfach:
Neben der .h Datei die Du irgendwo inkludiert hast musst Du dem Linker noch eine .lib Datei geben, das ist die sog. (Import)Library. Dieses Library enthält entweder dierkt die Definition der Funktion (statische Library) oder aber einen speziellen Code der das Laden der Funktion aus einer DLL ermöglicht (dynamische Lib).
Ich weiß nicht, wo man das beim VC angibt, baer es gibt da einen Dialog, wo man die Libraries angeben kann, ganz sicher. Welche Library du konkrete angeben mußt, weiß ich auch nicht, weil ich das Programm nicht kenne.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
24.10.2005, 15:16 Uhr
~Susi
Gast


Sagemal denkst nur weil ich ein Mädchen bin bin ich total bescheuert? Okay ich wollte in meinem ersten Beitrag anstatt von definition deklaration schreiben. Also nochmal ich versuche eine Lib zu kompilieren. Dabei tritt der Fehler auf. Ich habe die Header datei in der die Function DEKLARIERT wird und eine .cpp in der die DEFINITION stehen. Es wird ach alles richtig includet, trotzdem kommt der Fehler. Also nochmal: Woran kann das liegen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
24.10.2005, 15:17 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Beim VC++6. kanst du die entweder unter Projekt->Einstellungen->Linker ins Feld Objekt-/Bibliothekmodule einstragen.

Oder du fügst deinem Quellcode folgende Zeile zu:

C++:
#pragma comment(lib,"datei.lib")



Welche du jetzt aber angeben musst weiß ich auch nicht, das wird aber bestimmt irgendwo dokumentiert sein. Oder du suchst einfach mal nach einer .lib die genauso heißt wie deine .h und versuchst die


Edit: zu deinem letzten Post. Was hat das damit zu tun ob du ein Mädchen bist oder nicht? Du hast das Prinzip offensichtlich nicht verstanden und deshalb hat sich virtual netterweise die Mühe gemacht dir das ausführlich zu erklären. Aus deiner letzten Frage schließe ich das du dir das lieber nochmal genau durchlesen solltest
Wenn du wirklich eine cpp Datei hast in der die Funktion definiert wird dann musst du diese dem Projekt hinzufügen.

Dieser Post wurde am 24.10.2005 um 15:21 Uhr von Guybrush Threepwood editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.10.2005, 15:27 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat von ~Susi:
Sagemal denkst nur weil ich ein Mädchen bin bin ich total bescheuert?

Ob du ein Mädchen bist ist und war mir einerlei. Ob Du bescheuert bist, weiß ich auch nicht. Mich mit Deinem Problem weiter beschäftigen werde ich bestimmt nicht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.10.2005, 15:56 Uhr
~Susi
Gast


Also Virtula: Du mußt ja nicht gleich eingeschnappt sein. Ich fühle mich einfach nur misverstanden. Und ich kenne den unterschied zwischen Deklaration und Definition. Ich weiß auch was die Fehlermeldung bedeutet. Nur nicht in diesem Zusammenhang weil wie beschrieben alle Symbole aufgelöst werden. Und ich möchte keine lib bei mir einbinden und sie dann benutzen sondern ich will diese Lib erstmal erstellen! Und das ist mein Problem. Ich weiß auch wo man ne lib einbindet etc.. Aber das ist ja nicht mein Problem! Mein Compiler findet die Definition NIcht. Aber ich will ja wissen wieso!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
24.10.2005, 16:06 Uhr
Tommix



Hallo,
durchsuche mal die Sourcen nach den vermißten Bezeichnern, also _jpeg_get_small usw. Wie es aussieht hast Du wirklich nur eine CPP Datei vergessen ins Projekt einzubauen.

- Tommix


Bearbeitung:

Moment mal, in einer Bibliothek sollten nichtaufgelöste externe Symbole doch eigentlich kein Thema sein? Hast Du womöglich den falschen Projekttyp ausgewählt?


Dieser Post wurde am 24.10.2005 um 16:13 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
24.10.2005, 16:44 Uhr
~Susi
Gast


So jetzt wo du das gesagt hast. Es fehlte tatsächächlich eine c datei. Verdammt. Vielen Dank.

@Virtual:

Warum den gleich sachlich werden wenn es auch persönlich geht ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: