• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

(zusammen)linken zweier Bibliotheken

blutaermer

Ingrid Marie
Registriert
31.12.03
Beiträge
273
Hallo,

ich habe hier zwei dylibs rumliegen, die ich gerne verschmelzen wuerde. Ich dachte das geht so:
Code:
ld foo.dylib bar.dylib -o foobar.dylib
ich bekomme aber folgende fehlermeldung
Code:
ld warning: -arch not specified
ld: in foo.dylib, can't link with bundle (MH_BUNDLE) only dylibs (MH_DYLIB) for inferred architecture i386
:-( Googlen hat auch nichts gebracht. Weiss jemand woran das liegen kann?
 
Welche Architektur haben die Dylibs denn?

Alex
 
gute frage. ich vermute mal x86 (also x86 auf jedenfall, ich weiss nur nicht ob ppc auch - glaube es aber nicht). es gibt doch sicher eine moeglichkeit das herauszubekommen oder?
(ich hatte gedacht otool aber da finde ich gerade nix)
 
nachtrag:
Code:
ld -arch i386 foo.dylib bar.dylib -o foobar.dylib
reduziert die meldungen auf
Code:
ld: in foo.dylib, can't link with bundle (MH_BUNDLE) only dylibs (MH_DYLIB)
war irgendwie zu erwarten
 
dann gibt doch mal -arch i386 an

Alex
 
Dann ist die eine dylib keine. Was sagt denn "file" zu Deinen Dylibs?

Alex
 
sind beides bundles. (... Mach-O bundle i386)

kann man aus zwei bundles eins machen?
 
Das weiss ich jetzt auch nicht, offenbar nicht.

Um welche dylibs geht es denn?

Alex
 
die dylibs werden aus C++ code generiert. dazu bediene ich mich vorgegebener makefiles (ist ein projekt, was sich der infrastruktur eines relativ grossen anderen projektes bedient) und weiss daher auch nicht so ganz was dort passiert (ziemlich viel automatismen etc.).

unter linux werden wohl shared libs erstellt, die man dann in eine werfen kann - naja egal.

wird auch anders gehen. vielen dank fuer deine hilfe und ein schoenes, sonniges wochenende.
 
Zum Linken von C++ Dateien sollte man immer den C++ Compiler nutzen.

Hallo,

das hatte ich auch schon probiert und hab es eben nochmals probiert - funktioniert aber auch nicht.
Interessehalber: Warum sollte das eigentlich besser sein? Der Compiler ruft doch auch nur ld auf? g++ und gcc sind doch eh nur wrapper fuer cpp, cc1, as und ld - oder?
 
Interessehalber: Warum sollte das eigentlich besser sein? Der Compiler ruft doch auch nur ld auf? g++ und gcc sind doch eh nur wrapper fuer cpp, cc1, as und ld - oder?
Ja, aber der g++ ergänzt den Aufruf des Linkers um eine ganze Reihe von Optionen, die Du im Fall, daß Du ld direkt aufrufst erstmal mühsam zusammensuchen darfst. Insofern dürftest Du via g++ schneller zum Ziel kommen.
 
Ja, aber der g++ ergänzt den Aufruf des Linkers um eine ganze Reihe von Optionen, die Du im Fall, daß Du ld direkt aufrufst erstmal mühsam zusammensuchen darfst. Insofern dürftest Du via g++ schneller zum Ziel kommen.

Richtig, es gehört beim direkten Aufruf von ld einiges an "special build-foo" dazu, die Optionen können ziemlich obskur sein.

Und im übrigen ist es natürlich umgekehrt:

/usr/bin/cpp ist ein Script, dass auf OS X im Normalfall /usr/bin/gcc-4.0 aufruft.

Alex