本文介绍了LuaJava编译错误"解析外部符号"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! Default LuaJava distributions provides only 32-bit binaries. Obviously using them with 64-bit VM\OS causes exception.Also I can't just change Lua binaries to 64-bit, because this causesException in thread "main" java.lang.UnsatisfiedLinkError:org.keplerproject.luajava.LuaState._open()Lorg/keplerproject/luajava/CPtr;I don't know why is it so and Google didn't help me.I've decided it's because 64- and 32-bit libs are completely different, so I must recompile LuaJava and make linking myself.I downloaded sources from Lua repo at SourceForge (luabinaries/files/5.1.4/Windows%20Libraries/) (btw I tried with different versions, but I have not succeeded), installed MSVS to use nmake utility with Makefiles. Finally I followed guides from "LuaJava Manual" but I got only this:...\luajava-1.1>nmake -f makefile"#Here was java-files compilation logs#C compilationcl -nologo -DWIN32 -I"C:\Program Files\Java\jdk1.7.0_21\/include" -I"C:\Program Files\Java\jdk1.7.0_21\/include/win32" -I"P:\Lua\include" -Fosrc\C\\ -MD /c src\c\luajava.c luajava.clink /dll /nodefaultlib:"msvcrt.lib" -out:luajava-1.1.dll src\c\luajava.obj P:\Lua\lib\lua5.1.libMicrosoft (R) Incremental Linker Version 12.00.20827.3Copyright (C) Microsoft Corporation. All rights reserved.Creating library luajava-1.1.lib and object luajava-1.1.expluajava.obj : error LNK2019: unresolved external symbol __imp____iob_func referenced in function _Java_org_keplerproject_luajava_LuaState_luajava_1open@16luajava.obj : error LNK2019: unresolved external symbol __imp__fprintf referenced in function Java_org_keplerproject_luajava_LuaState_luajava_1open@16luajava.obj : error LNK2019: unresolved external symbol __imp__exit referenced in function Java_org_keplerproject_luajava_LuaState_luajava_1open@16luajava.obj : error LNK2001: unresolved external symbol "__fltused"LINK : error LNK2001: unresolved external symbol "__DllMainCRTStartup@12"luajava-1.1.dll : fatal error LNK1120: 5 unresolved externalsNMAKE : fatal error U1077: "P:\MS Visual Studio 2010\VC\BIN\link.EXE" : return code "0x460"Stop.Also here is luajava.h and luajava.cSo the question is how to resolve that problem (desirable so that it will work with at least LuaStateFactory.newLuaState().openLibs())? 解决方案 I have encountered this problem, but later resolved. Here is the solution.I've managed to compile a 64-bit luajava-64.dll, 64-bit luajava-64.so, 32-bit dynamic link libraries, and so on.Here are the steps.1. Install vs20102. Locate vs2010-visual studio tools    Open visual studio x64 Win64 Command Prompt tool    3. Download lua-5.1.5_Win64_vc10_lib.zip     . (Static library wrong key point is that this static library may download error, or you download as a dynamic library dll, download address: lua static library download:     http://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Static/)     Download luajava-1.1.zip    4. Open config.win modify LUA_DIR and JDK two paths for their own path     Note that you may not have your LUA_DIR below lib directory, then create your own needs and into which lua5.1.lib    5. cd enter luajava-1.1 directory    6. Run nmake -f Makefile.win    7. Compile success             Here is the situation at compile time:     C: \ Users \ softm \ Desktop \ luajava \ luajava-1.1> nmake -f Makefile.win         Microsoft (R) Program Maintenance Utility 10.00.30319.01 version     Copyright (C) Microsoft Corporation. All rights reserved.                 "D: \ soft \ Java \ jdk6_33 \ bin \ javac" -sourcepath ./src/java src / java / org / kep     lerproject / luajava / CPtr.java             "D: \ soft \ Java \ jdk6_33 \ bin \ javac" -sourcepath ./src/java src / java / org / kep     lerproject / luajava / JavaFunction.java     Note: Some input files use unchecked or unsafe operations.     Note: For more information, please use the -Xlint: unchecked recompiled.             "D: \ soft \ Java \ jdk6_33 \ bin \ javac" -sourcepath ./src/java src / java / org / kep     lerproject / luajava / LuaJavaAPI.java     Note: Some input files use unchecked or unsafe operations.     Note: For more information, please use the -Xlint: unchecked recompiled.             "D: \ soft \ Java \ jdk6_33 \ bin \ javac" -sourcepath ./src/java src / java / org / kep     lerproject / luajava / Console.java     Note: Some input files use unchecked or unsafe operations.     Note: For more information, please use the -Xlint: unchecked recompiled.             cd src / java             "D: \ soft \ Java \ jdk6_33 \ bin \ jar" cvf ../../luajava-1.1.jar org / keplerproje     ct / luajava / *. class     Marked list (manifest)     Increase: org / keplerproject / luajava / Console.class (read = 1921) (write = 1122) (compressed 41     %)     Increase: org / keplerproject / luajava / CPtr.class (read = 510) (write = 359) (29% compression)     Increase: org / keplerproject / luajava / JavaFunction.class (read = 942) (write = 524) (compressed      44%)     Increase: org / keplerproject / luajava / LuaException.class (read = 556) (write = 352) (compressed      36%)     Increase: org / keplerproject / luajava / LuaInvocationHandler.class (read = 1621) (written = 83     3) (48% compression)     Increase: org / keplerproject / luajava / LuaJavaAPI.class (read = 7168) (write = 3745) (compressed      47%)     Increase: org / keplerproject / luajava / LuaObject.class (read = 9045) (write = 3978) (compressed     56%)     Increase: org / keplerproject / luajava / LuaState.class (read = 18118) (write = 6435) (compressed     64%)     Increase: org / keplerproject / luajava / LuaStateFactory.class (read = 1293) (write = 722) (Pressure     Reduced by 44%)             cd ..             cd ..             "D: \ soft \ Java \ jdk6_33 \ bin \ javadoc" -classpath "src / java /" -public -quiet      -d "doc / us / API" src / java / org / keplerproject / luajava / JavaFunction.java src / java /     org / keplerproject / luajava / LuaException.java src / java / org / keplerproject / luajava /     LuaInvocationHandler.java src / java / org / keplerproject / luajava / LuaObject.java sr     c / java / org / keplerproject / luajava / LuaState.java src / java / org / keplerproject / luaja     va / LuaStateFactory.java src / java / org / keplerproject / luajava / Console.java             "D: \ soft \ Java \ jdk6_33 \ bin \ javah" -o src / c / luajava.h -classpath "luajava-     1.1.jar "org.keplerproject.luajava.LuaState             cl -nologo -DWIN32 -I "D: \ soft \ Java \ jdk6_33 / include" -I "D: \ soft \ Java \ jdk6     _33 / Include / win32 "-I" C: \ Users \ softm \ Desktop \ luajava \ lua \ include "-Fosrc \ C \\ -MD      / c src \ c \ luajava.c     luajava.c             link / dll /nodefaultlib:"msvcrt.lib "-out: luajava-1.1.dll src \ c \ luajava     .obj C: \ Users \ softm \ Desktop \ luajava \ lua \ lib \ lua5.1.lib     Microsoft (R) Incremental Linker Version 10.00.30319.01     Copyright (C) Microsoft Corporation. All rights reserved.        Creating library luajava-1.1.lib and objects luajava-1.1.exp     luajava.obj: warning LNK4217: locally defined symbol exit function Java_org_keplerproject     Import _luajava_LuaState_luajava_1open     luajava.obj: warning LNK4217: locally defined symbol fprintf function Java_org_keplerproj     Import ect_luajava_LuaState_luajava_1open     luajava.obj: warning LNK4217: locally defined symbol __iob_func function Java_org_keplerp     Import roject_luajava_LuaState_luajava_1open             del src \ java \ org \ keplerproject \ luajava \ *. class src \ c \ *. obj * .pdb * .exp *     .lib * .exp * .ilk     ------------------     Build Complete     ------------------ 这篇关于LuaJava编译错误"解析外部符号"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
06-16 21:18