1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

(zusammen)linken zweier Bibliotheken

Dieses Thema im Forum "OS X-Developer" wurde erstellt von blutaermer, 30.05.08.

  1. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    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?
     
  2. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Welche Architektur haben die Dylibs denn?

    Alex
     
  3. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    31.12.03
    Beiträge:
    273
    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)
     
  4. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    lipo -info datei

    Alex
     
  5. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    31.12.03
    Beiträge:
    273
    wie ich vermutet habe: non fat, i386
     
  6. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    31.12.03
    Beiträge:
    273
    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
     
  7. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    dann gibt doch mal -arch i386 an

    Alex
     
  8. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Dann ist die eine dylib keine. Was sagt denn "file" zu Deinen Dylibs?

    Alex
     
  9. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    31.12.03
    Beiträge:
    273
    sind beides bundles. (... Mach-O bundle i386)

    kann man aus zwei bundles eins machen?
     
  10. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    Das weiss ich jetzt auch nicht, offenbar nicht.

    Um welche dylibs geht es denn?

    Alex
     
  11. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    31.12.03
    Beiträge:
    273
    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.
     
  12. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.246
    Zum Linken von C++ Dateien sollte man immer den C++ Compiler nutzen. Falls notwendig die Linkeroptionen an den Compiler übergeben, die werden dann weitergereicht.
     
  13. blutaermer

    blutaermer Ingrid Marie

    Dabei seit:
    31.12.03
    Beiträge:
    273
    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?
     
  14. tjp

    tjp Baldwins roter Pepping

    Dabei seit:
    07.07.04
    Beiträge:
    3.246
    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.
     
  15. below

    below Kalterer Böhmer

    Dabei seit:
    08.10.06
    Beiträge:
    2.865
    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
     

Diese Seite empfehlen