这两天在 Xcode 工程中整合 LuaJIT,遇到一个小问题。html
根据 LuaJIT 的文档 (Embedding LuaJIT 章节),在 Mac x86_64 环境下编译时,必须指定 Linker Flags: -pagezero_size 10000 -image_base 100000000
。架构
问题是在 Xcode 中,若是你直接修改 Other Linker Flags,那么全部架构编译时都会使用这个参数。假如是一个 iOS 工程,那么实际上这个工程存在四种架构:iphone
armv7
- 32bit ARM for iOS Device编辑器
arm64
- 64bit ARM for iOS Deviceide
i385
- 32bit X86 for iOS Simulatorui
x86_64
- 64bit X86 for iOS Simulatorlua
因此以下图这样指定参数是不行的:spa
首先清除参数,而后点击 Debug/Release 旁边的 (+) 按钮,添加一个条件编译参数,并输入参数设定值:code
但在 Xcode 里没法直接指定咱们须要的编译条件。因此咱们须要从 Xcode 里关闭工程文件(确保工程文件已经保存),而后用文本编辑器打开工程的 project.pbxproj 文件。htm
project.pbxproj 文件在 Xcode 工程中。能够在 Finder 里右键点击 Xcode 工程,而后选择菜单“查看包内容”。
全文搜索输入的编译参数(注意参数会按照空格分割为多行,因此能够只搜索其中一个参数),找到以下内容:
"OTHER_LDFLAGS[arch=*]" = ( "-pagezero_size", 10000, "-image_base", 100000000, );
将其中的 [arch=*]
修改成 [sdk=iphonesimulator*][arch=x86_64]
,而且保存文件。
修改完毕后,用 Xcode 从新打开工程,能够看到编译条件已经变成了:
关于 Xcode 工程和条件编译参数,能够参考这篇文章:The Unofficial Guide to xcconfig files 。