我有一个在 Xcode 7.2 及更早版本上编译良好的项目,但在使用 Xcode 7.3 编译时出现链接器错误。我已经能够将其缩小到一个重复问题的简单示例项目。
基本的项目结构是这样的:
.
├── one
│ ├── lib
│ │ └── lib1.dylib
│ └── src
│ └── one.c
├── two
│ ├── lib
│ │ └── lib2.dylib
│ └── src
│ └── three.c
└── three
├── lib
│ └── lib3.dylib
└── src
└── two.c
lib3
与 的链接lib2
,以及与lib2
的链接lib1
。编译库时,其输出位于../lib
与其目录相关的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