在OSX Snow Leopard上构建LuaJava

我正在尝试在 OSX Snow Leopard 上构建 LuaJava,并且我遇到了链接问题。我已经修改了 OSX 的配置脚本,并确保所有路径都是正确的。我不得不更改 luajava.c(第2795行)以便lua_resume使用两个LuaStates。这将使其通过构建阶段,但在链接阶段失败。这是我得到的内容:

export MACOSX_DEPLOYMENT_TARGET=10.6; gcc -dynamiclib -all_load -o libluajava-1.1.jnilib src/c/luajava.o /usr/local/lib/liblua.a
Undefined symbols for architecture x86_64:
  "_luaL_findtable", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1LfindTable in luajava.o
  "_luaL_setn", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1LsetN in luajava.o
  "_luaL_getn", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1LgetN in luajava.o
  "_luaL_typerror", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1Ltyperror in luajava.o
  "_lua_getgccount", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1getGcCount in luajava.o
  "_lua_setfenv", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1setFEnv in luajava.o
  "_lua_getfenv", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1getFEnv in luajava.o
  "_lua_objlen", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1objlen in luajava.o
  "_lua_strlen", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1strlen in luajava.o
  "_lua_lessthan", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1lessthan in luajava.o
  "_lua_equal", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1equal in luajava.o
  "_lua_open", referenced from:
      _Java_org_keplerproject_luajava_LuaState__1open in luajava.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [libluajava-1.1.jnilib] Error 1

我不明白为什么会出现这种情况,因为我刚刚从源代码构建了这个系统的lua。有什么想法吗?

原文链接 https://stackoverflow.com/questions/9592959

点赞
stackoverflow用户221509
stackoverflow用户221509

我不确定你的设置有什么问题,以下是我在 Mac OS X Lion 上成功编译 LuaJava 的步骤:

下载并编译最新的 Lua 5.1

$ wget http://www.lua.org/ftp/lua-5.1.5.tar.gz
$ tar xzf lua-5.1.5.tar.gz
$ cd lua-5.1.5
$ make -j macosx
$ make install
$ cd ..

下载 LuaJava

$ wget https://github.com/jasonsantos/luajava/zipball/master
$ mv master luajava.zip
$ unzip luajava.zip
$ mv jasonsantos-luajava-32a3fcd/ luajava
$ cd luajava

编辑配置文件

$ diff -u config.old config
--- config.old  2007-12-27 08:38:30.000000000 +0100
+++ config  2012-03-07 20:11:28.000000000 +0100
@@ -1,11 +1,11 @@
 #############################################################
 #Linux/BSD/Mac
-LUA_DIR= /usr/local/share/lua/5.1.1
+LUA_DIR= /usr/local/share/lua/5.1
 LUA_LIBDIR= /usr/local/lib
-LUA_INCLUDES= /usr/local/include
-JDK= $(JAVA_HOME)
+LUA_INCLUDES= -I/usr/local/include -I/System/Library/Frameworks/JavaVM.framework/Headers
+#JDK= $(JAVA_HOME)
 # For Mac OS, comment the above line and uncomment this one
-#JDK=/Library/Java/Home
+JDK=/Library/Java/Home

 # Full path to Lua static library
 LIB_LUA=$(LUA_LIBDIR)/liblua.a
@@ -18,15 +18,15 @@
 LIB_PREFIX= lib

 #Linux/BSD
-LIB_OPTION= -shared
+#LIB_OPTION= -shared
 #Mac OS
-#LIB_OPTION= -dynamiclib -all_load
+LIB_OPTION= -dynamiclib -all_load

 ## On FreeBSD and Mac OS systems, the following line should be commented
 DLLIB= -ldl

 WARN= -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings
-INCS= -I$(JDK)/include -I$(JDK)/include/linux -I$(LUA_INCLUDES)
+INCS= -I$(JDK)/include -I$(JDK)/include/linux $(LUA_INCLUDES)
 CFLAGS= $(WARN) $(INCS)

 CC= gcc

编译 LuaJava

$ make
gcc -O2 -Wall -fPIC -W -Waggregate-return -Wcast-align -Wmissing-prototypes -Wnested-externs -Wshadow -Wwrite-strings -I/Library/Java/Home/include -I/Library/Java/Home/include/linux -I/usr/local/include -I/System/Library/Frameworks/JavaVM.framework/Headers   -c -o src/c/luajava.o src/c/luajava.c
... a million warnings later ...
export MACOSX_DEPLOYMENT_TARGET=10.3; gcc -dynamiclib -all_load -o libluajava-1.1.so src/c/luajava.o /usr/local/lib/liblua.a
------------------
编译完成
------------------
2012-03-07 19:24:49