【发布时间】:2013-03-30 09:12:01
【问题描述】:
我正在 xcode 上使用 cocos2d-x 编写游戏,但在为 armv7/7s 编译正确版本的 Lua 时遇到问题。
这是我收到的错误消息:
ld: warning: ignoring file
/Users/seriousgames/Documents/PopulationTest/PopulationTest/libs/lua/liblua.a, file was built for archive which is not the architecture being linked (armv7): /Users/seriousgames/Documents/PopulationTest/PopulationTest/libs/lua/liblua.a
Undefined symbols for architecture armv7:
"_luaL_newstate", referenced from:
Behavior::onTerminate(Status) in Behavior.o
"_luaL_openlibs", referenced from:
Behavior::onTerminate(Status) in Behavior.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果我选择为 macosx(不是 iOS)编译,LUA 确实可以工作。
编辑:我最终使用了旧版本的 Lua,版本 5.1.4,并按照此处的说明进行操作:http://blog.stokedsoftware.com/blog/2012/02/05/scripting-ios-games-with-lua-part-ii/ 此方法不需要 lualib.a 外部库,而是 xcode 将 lua 源构建到项目中。
注意:虽然他的代码是在 Objective C 中,但我发现他的方法确实适用于 cocos2d-x。
他专门从构建中排除了 lua.c 和 luac.c 文件。我选择不这样做,但我注释掉了 int main() 函数,因为它们会与 main.m 中的函数发生冲突。我会标记一下这个问题的答案,但我仍然有兴趣知道如何为 arm7/7s 构建 liblua.a。
【问题讨论】:
-
看起来你为 OS X 而不是 iOS 编译了
liblua.a。 -
那个错误只是链接失败。很难弄清楚为什么没有为正确的架构编译库。考虑粘贴来自
otool -a的存档标题 -
您的代码似乎是C++,但您没有告诉编译器Lua库是C库。包括 lua.hpp 而不是 lua.h
-
它必须是 extern "C" {#include "lua.h"} 因为没有 lua.hpp
-
好吧,顺便提一下——我已经在使用 lua 调用的类的外部 C 中包含了“lua.h”;此外,makefile 中似乎没有 armv7 或 ios 标志。我尝试为 macosx 和 generic 构建,这两者都给出了不起作用的 liblua.a。 (我还不太熟悉 makefile 的结构。)
标签: c++ ios cocos2d-iphone lua cocos2d-x