跨iOS平台编译方法及问题
- 跨iOS编译过程
- 修改工程目录下的cmakelist.txt文件
- 默认开启VR_BUILD_PLATFORM_IPHONE,否则cmake时很多报错。
- 修改iphone版本,设置C++编译器,设置sdk目录
IF(IPHONE_VERSION_MIN LESS "6.0")
include(CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER(llvm-gcc-4.2 GNU)
CMAKE_FORCE_CXX_COMPILER(llvm-gcc-4.2 GNU)
SET(GCC_THUMB_SUPPORT NO)
ENDIF()
IF(VR_BUILD_PLATFORM_IPHONE)
SET (IPHONE_DEVROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer")
SET (IPHONE_SDKROOT "${IPHONE_DEVROOT}/SDKs/iPhoneOS${IPHONE_SDKVER}.sdk")
ELSE()
SET (IPHONE_DEVROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer")
SET (IPHONE_SDKROOT "${IPHONE_DEVROOT}/SDKs/iPhoneSimulator${IPHONE_SDKVER}.sdk")
ENDIF()
- 默认关闭VR_GL1_AVAILABLE,只开启VR_GL2_AVAILABLE
OPTION(VR_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library."OFF)
- 默认关闭DYNAMIC_VRSTAR,使用静态编译
- 设置第三方依赖资源
- 设置c++标准库
IF (APPLE)
# set standard lib, clang defaults to c++0x
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -stdlib=libstdc++ -Wno-overloaded-virtual -Wno-conversion")
set(WARNING_CFLAGS "")
ENDIF()
- 设置xcode工程的部分属性
- CMakeModules目录下添加相应的第三方Findxx.cmake脚本文件
配置第三方库的查找头文件路径,库全路径等,注意大小写。
- 启动Cmaker工具将cmakelist.txt拖入窗口
- 生成路径默认为cmakelist.txt所在目录,可更改(新建build文件夹)。
- 点击“Configure”按钮,进行选项配置,平台默认Xcode即可。
- 主要设置选项:
- 点击“Configure”按钮,直到配置成功。
- 最后点击“Generate”按钮,生成Xcode工程。
- 启动VRStar.xcodeproj,修改工程属性
1)总工程与各工程的Architectures改为标准结构,否则源码不能编译
- 根据ipad设备版本,修改IOS开发目标
- build工程,快捷键command+B,运行command+R
- C++源码跨IOS注意事项
- 包含头文件时有子目录分隔符必须用“/”,否则不识别“\”
- VRString.cpp toString()中,Size_t 不同平台定义不同.win32中win64时为unsinged long long;IOS下为unsigned long,总是重定义,暂时去掉
- 不要使用UInt32,与IOS中重复定义,改为_uint或unsinged int