将 react-native 升级到 0.39.0 及更高版本时出现重复符号错误

Duplicate symbols error when upgrading react-native to 0.39.0 and above

我正在尝试将 ios 应用更新为 react-native 0.39 及更高版本。 一切都在 0.38.2 上运行,但在那之后我遇到了 ld: X duplicate symbols for architecture Y 问题。 该应用程序本身是 swift、obj-c、网络嵌入等的混合...

但它有一个由 swift 和 react-native 组成的共享扩展。

npm 和 pod 安装似乎没有问题。

经过一番研究,我找到了问题的原因,并尝试了很多解决方案,但仍然没有成功解决:

[...|similar duplicate symbol _CSSNodeList{something}] duplicate symbol _CSSNodeListFree in: ~/Library/Developer/Xcode/DerivedData/....../Build/Products/Debug-iphonesimulator/React/libReact.a(CSSNodeList-10ACA1A52987016B.o) ~/Library/Developer/Xcode/DerivedData/....../Build/Products/Debug-iphonesimulator/React/libReact.a(CSSNodeList-5089F60B494D1C9C.o) duplicate symbol _CSSNodeListAdd in: ~/Library/Developer/Xcode/DerivedData/....../Build/Products/Debug-iphonesimulator/React/libReact.a(CSSNodeList-10ACA1A52987016B.o) ~/Library/Developer/Xcode/DerivedData/....../Build/Products/Debug-iphonesimulator/React/libReact.a(CSSNodeList-5089F60B494D1C9C.o) ld: 103 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

据我所知,我的共享扩展中的某处至少有 2 个对 CSSNodeList 的引用(可能还有其他 React 对象)。但是查看 linked frameworks and librarieslink binary with libraries,我只能看到一个,如果我删除 libReact.a 并放回去,问题仍然存在。

尝试清理项目 DerivedData,pods,node_modules (...) 但没有成功。

(如果有帮助,我是运行 Xcode 8.2.1,Cocoapod 1.1.1,npm 4.0.5。)

谢谢你们的帮助,伙计们。

我遇到了同样的问题。解决方案记录在 https://github.com/facebook/react-native/issues/11502

简短的回答是 select 您的 pod 项目,select React 目标,然后 select 构建阶段和编译源代码。

在那里删除 CSSLayout.c 和 CSSNodeList.c 。

尝试重新构建。就我而言,我仍然有错误。

所以回到 React 编译源和 re-add CSSLayout.c 和 CSSNodeList.c。

再次构建,瞧!!