欢迎阅读指正和转载,但请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
 
在iMac上编译luaplus
 
luaplus作者提供的xcode工程文件在Mac OS X平台上是可以直接使用的,但因为iOS是不支持加载动态库的(苹果的意思是任何动态库的加载都为hacker提供了注射恶意代码的可能,但我个人认为是Jobs的守财),所以,如果选用了ios5.0 SDK作为base sdk的话,lua中的loadlib.c中会出现一些编译不过的地方。因为这些地方用到的函数在ios5.0 SDK中是已经被废弃了的。所以必须修改一下。修改的方法就是将这些函数不予以实现,或者返回一个空值就可以了。这些代码在loadlib.c中的另一个条件编译代码段中就有。
 
经过修改之后,luaplus的静态库是可以编译成功了。但在新的测试工程中link这个库的时候,会出现 file was built for archive which is not the architecture being linked (i386) 的错误提示,这是因为iPad/iPhone真机和iMac模拟器所使用的指令集是不同的,所以在编译静态库的时候,必须要编译两种基于不同指令集的库,然后使用lipo程序把两个库合二为一,使得在真机和模拟器中都能用同一个库进行编译和运行。
 
编译luaplus时,发现总是出现“The selected run destination is not valid for this action”的提示,经过一番折腾,发现作者撰写的luaplus xcode工程文件使用的base sdk是Mac OS X 10.4.而我机器上的Xcode的base sdk的版本是10.7的,把它改正了就ok了
 
在编译代码的过程中,loadlib.c文件出现了
 
Developer/SDKs/LuaPlus51_1100/Src/LuaPlus/src/loadlib.c:191: warning: 'NSLinkEditError' is deprecated (declared at /Developer/SDKs/MacOSX10.7.sdk/usr/include/mach-o/dyld.h:216)
 
这几个警告,很显然是这几个函数在新版本的sdk中已经被废弃了,虽然静态库文件是编译出来了,但不清楚这样子会不会影响lua装载其他库文件,另外也不知道这个库文件能不能使用在ios上,需要写代码验证一番才行
 
顺便对gdb的一些命令在这里做个简单记录:
 
命令
解释
break NUM
在指定的行上设置断点。
bt
显示所有的调用栈帧。该命令可用来显示函数的调用顺序。
clear
删除设置在特定源文件、特定行上的断点。其用法为:clearFILENAME:NUM。
continue
继续执行正在调试的程序。该命令用在程序由于处理信号或断点而导致停止运行时。
display EXPR
每次程序停止后显示表达式的值。表达式由程序定义的变量组成。
file FILE
装载指定的可执行文件进行调试。
help NAME
显示指定命令的帮助信息。
info break
显示当前断点清单,包括到达断点处的次数等。
info files
显示被调试文件的详细信息。
info func
显示所有的函数名称。
info local
显示当函数中的局部变量信息。
info prog
显示被调试程序的执行状态。
info var
显示所有的全局和静态变量名称。
kill
终止正被调试的程序。
list
显示源代码段。
make
在不退出gdb的情况下运行make工具。
next
在不单步执行进入其他函数的情况下,向前执行一行源代码。
print EXPR
显示表达式EXPR的值。
print-object
打印一个对象
print (int) name
打印一个类型
print-object [artist description]
调用一个函数
set artist = @"test"
设置变量值
whatis
查看变量的数据类型