我在Objective C(OSX)中创建了一个静态库,用于执行一些计算。然后我编译它并将其包含在另一个项目中。后来我无法在我的代码中使用它。
1>我写的时候
import "Auth.h"
它给了我一个找不到文件错误。为什么会这样?
2 - ;然后我必须将搜索路径设置为库的源,并且它已被编译并正确执行。这是否意味着我不能将编译库与其他项目一起重用而不分发源代码?
3>我想如果指定了搜索路径,则不需要编译库。所以我删除了库。但那没用。这意味着源+库都是必需的。
实际发生了什么。我只是想与项目的其他团队分发libAuth.a而不给出源代码。我怎么能这样做。
答案 0 :(得分:1)
您只需提供库文件(.a
)和头文件;源文件可以保持私有和未分发。
确保为可能使用该库的所有体系结构(OSX上的x86_64
和i386
)编译库,使用lipo
创建 fat二进制文件 .a
档案。
例如:
xcrun --sdk macosx10.8 clang -arch x86_64 -o file1.o file1.m
xcrun --sdk macosx10.8 clang -arch x86_64 -o file2.o file2.m
xcrun --sdk macosx10.8 libtool -static -arch_only x86_64 -o libmystuff_x86_64.a file1.o file2.o
xcrun --sdk macosx10.8 clang -arch i386 -o file1.o file1.m
xcrun --sdk macosx10.8 clang -arch i386 -o file2.o file2.m
xcrun --sdk macosx10.8 libtool -static -arch_only i386 -o libmystuff_i386.a file1.o file2.o
xcrun --sdk macosx10.8 lipo -arch x86_64 libmystuff_x86_64.a -arch i386 libmystuff_i386.a -create -output libmystuff.a
答案 1 :(得分:1)
尝试在主项目目标设置中添加以下内容;
“ - ObjC”和“-all_load”构建设置>链接>其他链接器标志, “$(TARGET_BUILD_DIR)/ usr / local / lib / include”和“$(OBJROOT)/ UninstalledProducts / include”来构建设置>搜索路径>标题搜索路径, " $(BUILT_PRODUCTS_DIR)"构建设置>用户标题搜索路径。