Library & Linken
-
Ich habe versucht so meine Library zu erstellen, geht aber nicht. Wo liegt bei mir der Fehler? (ist für MAC)
Die eintest.cpp muss gelinkt werden mit den Frameworks, das ganze soll aber in eine Library sein. Bloß wie?$(cc) -DMAC -x objective-c++ -c eintest.cpp libtool -static -o libWlan.a eintest.o rm eintest.o $(cc) -DMAC -lobjc -framework Foundation -framework CoreFoundation -F/System/Library/PrivateFrameworks -framework Apple80211 -L. -o Test Test.cpp -lWlan
-
Bitte, bitte helft mir! *Verzweifel*
Ich habe jetzt schon Ewigkeiten probiert ds irgendwie zum laufen zu bringen.
-
Ehm, versteh ich es richtig, das du eine Lib entwickelt hast die widerrum andere Libs benutzt? Und du willst alles in eine Lib verlinken?
Das macht 1. keinen Sinn, und 2. geht das nicht.
Gib deine eigene Lib weiter und wer sie benutzt, muß die anderen Libs selbst besorgen und mit berlinken. Ist auch besser so, weil Libs sind immer einzeln, sonst würden sie nicht den Modulgedanken verfolgen.
-
So will ich es doch auch mache, aber wie geht das? Ich habe ja gepostet wie ich es gemacht habe und da habe ich ja erst versucht die Lib zu erstellen und sie danach zu verwenden und mitzulinken. Hat aber nicht funktioniert. Warum? Er findet einfach die verwendeten Methoden nicht aus den fremden Libs. Einen Fehler gibt es aber auch nicht.
Gibt es irgendwo ein Beispiel wie man andere Libs mit linkt die in der eigenen notwendig sind?
-
Irgendein_Horst schrieb:
Gibt es irgendwo ein Beispiel wie man andere Libs mit linkt die in der eigenen notwendig sind?
bestimmt in deiner doko von deinem compiler

vermute mal -lframework müsste gehen
-
Wenn sich da mal was finden lassen würde für den g++ oder c++.
Es gibt nur -framework, aber das habe ich ja verwendet. -> siehe mein beispiel
Bringt aber nichts, er findet danach die verwendeten methoden trotzdem nicht.
-
Irgendein_Horst schrieb:
$(cc) -DMAC -lobjc -framework Foundation -framework CoreFoundation -F/System/Library/PrivateFrameworks -framework Apple80211 -L. -o Test Test.cpp -lWlanWenn ich den compiler-aufruf richtig verstehe linkst du nur die libobjc und deine libWlan zu deiner test. Bist du sicher dass die Funktionen die der linker nicht findet auch in libobjc oder libWlan zu finden sind ??
edit: sag mal in welcher library die funktionen liegen die der Linker nicht findet.
Kurt
-
Die Funktionen die er nicht findet liegen in der Apple80211 (vom Mac), wofür dier anderen beiden Frameworks aber mit von nöten sind.
Erstelle ich keine Library, sondern nur ein normales Object, dann findet er die Methoden auch.
Also muss es irgendwas mit der Library zu tun haben.
-
wie schon oben steht, ist es nicht sehr sinnvoll, andere libs in eine selbstgeschriebene lib einzulinken. Wie wärs wenn du für die benötigten Funktionen Vorwärtsdeklarationen gibst? Dann sollte das ganze auch ohne die anderen Libs kompilieren.
-
Was sind Vorwärtsdeklarationen?
Habe davon leider noch nichts gehört...
-
du schreibst nur den Funktionskopf und definierst die Funktion später/woanders. Der compiler braucht nur zu wissen, dass es sie gibt, nicht wie sie aussieht, wenn er zu dem funktionsaufruf kommt.
Das ist ähnlich wie bei den klassendefinitionen, dort schreibst du ja auch nur, dass es die ganzen Methoden gibt, aber nicht, wie sie arbeiten. Trotzdem kompiliert der compiler dir ohne beanstandungen den objektcode.
-
Hast du dazu vielleicht ein Beispiel?
Es gibt daz nicht wirklich viele Infos...
-
Jedes .h-File beinhaltet haufenweise Beispiele.
-
Versuche mal :
$(cc) -DMAC -x objective-c++ -c eintest.cpp $(cc) -DMAC -lobjc -framework Foundation -framework CoreFoundation -F/System/Library/PrivateFrameworks -framework Apple80211 -L. eintest.o -o Test Test.cppWenn das funktioniert dann liegts nicht an deiner statischen library.
Kurt