Ich habe ein Projekt, das auf Xcode 7.2 und früher, aber gets linker errors when compiling with Xcode 7.3 fein kompiliert. Ich konnte es auf simple example project eingrenzen, das das Problem dupliziert.Xcode 7.3 + Verknüpfung zu relativen Pfaden = ld: Datei nicht gefunden: ../lib/lib_.dylib
Die Grundstruktur Projekt ist wie folgt:
.
├── one
│ ├── lib
│ │ └── lib1.dylib
│ └── src
│ └── one.c
├── two
│ ├── lib
│ │ └── lib2.dylib
│ └── src
│ └── three.c
└── three
├── lib
│ └── lib3.dylib
└── src
└── two.c
lib3
Links mit lib2
und lib2
Links mit lib1
. Wenn die Bibliothek kompiliert wird, befindet sich ihre Ausgabe im Verzeichnis ../lib
relativ zu ihrem Verzeichnis src
.
Wenn ich versuche, lib3
zu kompilieren, Fehler mit , obwohl ../../one/lib
in der Bibliothek Suchpfad ist.
Welche seltsame und mystische Linker-Flagge kann ich verwenden, um die Suchpfade zum Laufen zu bringen, okay? Oder ist das ein Fehler mit Xcode?
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C one/src
cc -I ../../include -c -o one.o one.c
cc -dynamiclib -undefined dynamic_lookup -flat_namespace -o ../lib/lib1.dylib one.o
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C two/src
cc -I ../../include -c -o two.o two.c
cc -dynamiclib -undefined dynamic_lookup -flat_namespace -L ../../one/lib -o ../lib/lib2.dylib two.o -l1
/Applications/Xcode.app/Contents/Developer/usr/bin/make -C three/src
cc -I ../../include -c -o three.o three.c
cc -dynamiclib -undefined dynamic_lookup -flat_namespace -L ../../two/lib -L ../../one/lib -o ../lib/lib3.dylib three.o -l2
ld: file not found: ../lib/lib1.dylib for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [../lib/lib3.dylib] Error 1
make: *** [all] Error 2
Danke für eine ausführliche Antwort. Ich habe nicht die Möglichkeit, die Lib-Verzeichnisse im realen Projekt zu kombinieren, aber die anderen Informationen sollten sehr hilfreich sein. FWIW, -undefined dynamic_lookup bewirkt, dass zur Linkzeit nicht definierte Symbole zur Laufzeit dynamisch aufgelöst werden. Ich frage mich, ob das der Grund für einige meiner Probleme ist ... – leedm777
@ leedm777 Ich würde ohne versuchen. Um die Bibliotheken getrennt zu halten, sollte es nur möglich sein, mehr "-Wl" -Optionen in "$ (LD)" zu übergeben und nicht mehr. – trojanfoe