私は、Xcode 7.2以前ではコンパイルされたプロジェクトがありますが、gets linker errors when compiling with Xcode 7.3です。私は問題を複製するsimple example projectに絞ることができました。Xcode 7.3 +相対パスへのリンク= ld:ファイルが見つかりません:../lib/lib_.dylib
.
├── one
│ ├── lib
│ │ └── lib1.dylib
│ └── src
│ └── one.c
├── two
│ ├── lib
│ │ └── lib2.dylib
│ └── src
│ └── three.c
└── three
├── lib
│ └── lib3.dylib
└── src
└── two.c
lib3
lib2
とのリンク、およびlib1
とlib2
リンク:
基本的なプロジェクト構造は次のようです。ライブラリがコンパイルされると、その出力はsrc
ディレクトリに対して../lib
ディレクトリにあります。
lib3
をコンパイルしようとすると、../../one/lib
がライブラリ検索パスに含まれていても、file not found: ../lib/lib1.dylib
でエラーが発生します。
検索パスを正常に機能させるために、私は奇妙で神秘的なリンカーフラグを使用できますか?またはこれは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
詳細な回答ありがとうございます。実際のプロジェクトでlibディレクトリを組み合わせるオプションはありませんが、その他の情報は非常に役立つはずです。 FWIW、-undefined dynamic_lookupは、リンク時に未定義シンボルを実行時に動的に解決するようにします。私はそれが私の問題の原因であるのだろうかと思っています。 – leedm777
@ leedm777私はしなくてもやっていきます。ライブラリを別々にするためには、 '$(LD)'の '-Wl、'オプションのうちの多くを渡すことが必要です。 – trojanfoe