我有一個編譯好的Xcode 7.2和更早版本的項目,但是gets linker errors when compiling with Xcode 7.3。我已經能夠縮小到一個simple example project重複的問題。Xcode 7.3 +鏈接到相對路徑= ld:找不到文件:../lib/lib_.dylib
的基本項目的結構是這樣的:有lib2
.
├── one
│ ├── lib
│ │ └── lib1.dylib
│ └── src
│ └── one.c
├── two
│ ├── lib
│ │ └── lib2.dylib
│ └── src
│ └── three.c
└── three
├── lib
│ └── lib3.dylib
└── src
└── two.c
lib3
聯繫,並與lib1
lib2
鏈接。編譯庫時,其輸出位於目錄中,相對於其目錄src
。
當我嘗試編譯lib3
時,它與file not found: ../lib/lib1.dylib
錯誤,即使../../one/lib
位於庫搜索路徑中。
我可以使用什麼奇怪而神祕的鏈接器標記來獲得搜索路徑嗎?或者這是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