首页 > 解决方案 > Xcode中opencascade库的IOS示例Lex编译错误

问题描述

我正在尝试在 MacOs 上构建 OPENCascade 库的 IOS 示例。使用了 Xcode 版本:10.2、10、3、11.1。现在我收到以下类型的错误:

../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:60: bad character: =
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:62: name defined twice
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:63: bad character: {
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:65: bad character: }
../occt_lib/src/BRepFeat/BRepFeat_MakeCylindricalHole.lxx:66: premature EOF
flex: error deleting output file ../project.build/DerivedSources/BRepFeat_MakeCylindricalHole.yy.cxx
Command ../XcodeDefault.xctoolchain/usr/bin/lex failed with exit code 1

我认为可能的原因:
1)我没有项目中的所有文件(我已经检查过了,所以这不应该是原因)
2)Xcode没有以正确的方式处理.lxx文件.

标签: iosxcodeopencascade

解决方案


在 OCCT 文件名转换中,.lxx 是内联 C++ 头文件的扩展名,包含在同名的 .hxx 头文件中。BRepFeat包没有任何 .yacc/.lex 文件,因此BRepFeat_MakeCylindricalHole.yy.cxx根本不应该存在。

看起来问题出在生成 XCode 项目/Makefile 的构建例程(CMake 或 Tcl 脚本)中。从问题中不清楚是在构建 OCCT 本身(以及已采取哪些步骤)或在构建 iOS 示例(是 OCCT 附带的还是从头开始编写的?)时发生问题。

OCCT 的 CMake 构建可以通过以下交叉编译工具链和伪 bash 脚本进行配置: https ://github.com/leetal/ios-cmake

export IPHONEOS_DEPLOYMENT_TARGET=8.0
aFreeType=$HOME/freetype-2.7.1-ios
  cmake -G "Unix Makefiles" \
  -D CMAKE_TOOLCHAIN_FILE:FILEPATH="$HOME/ios-cmake.git/ios.toolchain.cmake" \
  -D PLATFORM:STRING="OS64" \
  -D ARCHS:STRING="arm64" \
  -D IOS_DEPLOYMENT_TARGET:STRING="$IPHONEOS_DEPLOYMENT_TARGET" \
  -D ENABLE_VISIBILITY:BOOL="TRUE" \
  -D CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL="OFF" \
  -D CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS:BOOL="OFF" \
  -D CMAKE_BUILD_TYPE:STRING="Release" \
  -D BUILD_LIBRARY_TYPE:STRING="Static" \
  -D INSTALL_DIR:PATH="work/occt-ios-install" \
  -D INSTALL_DIR_INCLUDE:STRING="inc" \
  -D INSTALL_DIR_LIB:STRING="lib" \
  -D INSTALL_DIR_RESOURCE:STRING="src" \
  -D INSTALL_NAME_DIR:STRING="@executable_path/../Frameworks" \
  -D 3RDPARTY_FREETYPE_DIR:PATH="$aFreeType" \
  -D 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2:FILEPATH="$aFreeType/include" \
  -D 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build:FILEPATH="$aFreeType/include" \
  -D 3RDPARTY_FREETYPE_LIBRARY_DIR:PATH="$aFreeType/lib" \
  -D USE_FREEIMAGE:BOOL="OFF" \
  -D BUILD_MODULE_Draw:BOOL="OFF" \
  "/Path/To/OcctSourceCode"
aNbJobs="$(getconf _NPROCESSORS_ONLN)"
make -j $aNbJobs
make install

推荐阅读