这两天在 Xcode 工程中整合 LuaJIT,遇到一个小问题。
根据 LuaJIT 的文档 (Embedding LuaJIT 章节),在 Mac x86_64 环境下编译时,必须指定 Linker Flags: -pagezero_size 10000 -image_base 100000000
。
问题是在 Xcode 中,如果你直接修改 Other Linker Flags,那么所有架构编译时都会使用这个参数。假如是一个 iOS 工程,那么实际上这个工程存在四种架构:
armv7
- 32bit ARM for iOS Devicearm64
- 64bit ARM for iOS Devicei385
- 32bit X86 for iOS Simulatorx86_64
- 64bit X86 for iOS Simulator
所以如下图这样指定参数是不行的:
设置条件编译参数
首先清除参数,然后点击 Debug/Release 旁边的 (+) 按钮,添加一个条件编译参数,并输入参数设定值:
但在 Xcode 里无法直接指定我们需要的编译条件。所以我们需要从 Xcode 里关闭工程文件(确保工程文件已经保存),然后用文本编辑器打开工程的 project.pbxproj 文件。
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 。