3

是否可以在静态库中包含 3rd 方库?示例:AFNetworking 可以包含在静态库中吗

4

2 回答 2

3

您的问题的直接答案是肯定的,如果第三方库公开了公共 API(一组标头供您参考),您绝对可以包含任何第三方库。对于 AFNetworking,他们通过提供 Cocoapods 脚本让您的项目可以引用它,从而使其变得如此简单。

但是请注意,当您发布包含 AFNetwork 的静态库时,如果您的静态库用户决定在自己的代码中使用 AFNetwork,Obj-C 编译器将抱怨重复符号,他将无法构建他的项目与您的静态库。

我的建议

我的建议:只需参考上面@Amar 共享的链接。如果您希望与其他开发人员或社区共享,请不要在静态库中包含任何第三方库,这一点非常重要。始终考虑使用其他第三方静态库的引用而不是包含它们,例如使用 Cocoapods。

于 2013-11-04T16:33:31.150 回答
0

只是为了完整性,因为我认为以前的答案/评论提供了很好的建议,这是一个自定义脚本,用于将第三方库包含到构建的输出库中

set -e
set +u

TGT_FULLPATH="${BUILT_PRODUCTS_DIR}/${EXECUTABLE_NAME}"
TMP_FULLPATH="${BUILT_PRODUCTS_DIR}/original_${EXECUTABLE_NAME}"
THIRPARTY_FULLPATH=...
ARCHSPECIFIC_THIRDPARTY="${BUILT_PRODUCTS_DIR}/thinThirdparty"

# What's the architecture for the lib we just built?
LIPO_ARCH=$(lipo -info  ${TGT_FULLPATH} | awk 'END{ print $NF }')

# Create a thirdparty lib only for the current architecture
lipo -thin ${LIPO_ARCH} ${THIRPARTY_FULLPATH} -output ${ARCHSPECIFIC_THIRDPARTY}

# Join the two libaries
mv ${TGT_FULLPATH} ${TMP_FULLPATH}
libtool -static -o ${TGT_FULLPATH} ${TMP_FULLPATH} ${ARCHSPECIFIC_THIRDPARTY} 2>&1  >/dev/null 

# Remove the temp artifacts
rm ${TMP_FULLPATH}
rm ${ARCHSPECIFIC_THIRDPARTY}
于 2014-01-29T09:16:58.550 回答