2013-11-01 83 views
0

最后我编译了它。主要的错误是关于VS环境变量。编译和链接适当我需要键入LuaJava编译错误“无法解析的外部符号”

%VisualStudoFolder%\VC\vcvarsall.bat amd64 
nmake -f makefile 

默认LuaJava分布仅提供32位二进制文​​件。显然,在64位VM \ OS中使用它们会导致异常。

此外,我不能只是改变Lua的二进制到64位,因为这会导致

Exception in thread "main" java.lang.UnsatisfiedLinkError: 
org.keplerproject.luajava.LuaState._open()Lorg/keplerproject/luajava/CPtr; 

我不知道为什么会这样和谷歌没有帮助我。

我决定这是因为64位和32位库完全不同,所以我必须重新编译LuaJava并将自己链接起来。 (luabinaries/files/5.1.4/Windows%20Libraries /)(顺便说一下,我尝试过不同的版本,但我没有成功),安装MSVS使用nmake实用程序与Makefiles。最后,我也跟着从“LuaJava手册”导游,但我只拿到了这一点:

...\luajava-1.1>nmake -f makefile 
" 
#Here was java-files compilation logs 

#C compilation 
cl -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.c 

link /dll /nodefaultlib:"msvcrt.lib" -out:luajava-1.1.dll src\c\luajava.obj P:\Lua\lib\lua5.1.lib 
Microsoft (R) Incremental Linker Version 12.00.20827.3 
Copyright (C) Microsoft Corporation. All rights reserved. 

Creating library luajava-1.1.lib and object luajava-1.1.exp 
luajava.obj : error LNK2019: unresolved external symbol __imp____iob_func referenced in function [email protected] 
luajava.obj : error LNK2019: unresolved external symbol __imp__fprintf referenced in function [email protected] 
luajava.obj : error LNK2019: unresolved external symbol __imp__exit referenced in function [email protected] 
luajava.obj : error LNK2001: unresolved external symbol "__fltused" 
LINK : error LNK2001: unresolved external symbol "[email protected]" 
luajava-1.1.dll : fatal error LNK1120: 5 unresolved externals 
NMAKE : fatal error U1077: "P:\MS Visual Studio 2010\VC\BIN\link.EXE" : return code "0x460" 
Stop. 

而且here is luajava.hluajava.c

所以现在的问题是如何解决这个问题(理想的,从而将与至少LuaStateFactory.newLuaState().openLibs()工作)?

+0

尝试删除'/ nodefaultlib:“msvcrt.lib”'。 – greatwolf

+0

这帮助我了解了我编译到IA32拱(而想要amd64)。之后,我搜索了所有的互联网,发现主要的错误是开始:LuaJava手册说首先执行“vcvars32.bat”(来自Visual Studio)。所以我使用了32位库和其他东西,并且有一千次出现链接错误。最后,我用'vcvarsall.bat amd64'并成功。 – AlpenDitrix

回答

0

我遇到过这个问题,但后来解决了。这是解决方案。
我设法编译了一个64位luajava-64.dll,64位luajava-64.so,32位动态链接库等等。

以下是这些步骤。

1. Install vs2010 

2. 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 
     ------------------ 
相关问题