LuaJava编译错误"解析外部符号" [英] LuaJava compile error "Unresolved external symbol"

查看:854
本文介绍了LuaJava编译错误"解析外部符号"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


  

最后,我编了。主要错误是关于VS ENVIROMENTAL变量。编译和链接正确的,我需要键入

 %VisualStudoFolder%\\ VC \\ vcvarsall.bat AMD64
NMAKE生成文件-f


默认LuaJava发行只提供了32位二进制文​​件。显然,使用它们的64位虚拟机\\ OS导致异常。

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

 异常线程mainjava.lang.UnsatisfiedLinkError中:
org.keplerproject.luajava.LuaState._open()Lorg / keplerproject / luajava / CPTR;

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

我已经决定了,那是因为64位和32位的库是完全不同的,所以我必须重新编译LuaJava并连接自己。

我下载了从Lua回购源在SourceForge(luabinaries /文件/ 5.1.4 / WINDOWS%20Libraries /)(顺便说一句我试着用不同的版本,但我还没有成功),安装MSVS使用 NMAKE 实用程序Makefile文件。最后,我也跟着从LuaJava手册导游,但我只拿到了这一点:

  ... \\ luajava-1.1> NMAKE的makefile -f

#Here是Java的编译文件日志#C编译
CL -nologo -DWIN32 -IC:\\ Program Files文件\\的Java \\ jdk1.7.0_21 \\ /包括-IC:\\ Program Files文件\\的Java \\ jdk1.7.0_21 \\ /有/ win32的-IP: \\的Lua \\包括-Fosrc \\ C \\\\-MD / C的src \\ C \\ luajava.c luajava.c链接/ DLL /nodefaultlib:\"msvcrt.lib退房手续:luajava-1.1.dll的src \\ C \\ luajava.obj病人:\\的Lua \\ LIB \\ lua5.1.lib
微软(R)增量链接器版本12.00.20827.3
版权所有(C)微软公司。版权所有。创建库luajava-1.1.lib和对象luajava,1.1.exp
luajava.obj:错误LNK2019:​​在功能_Java_org_keplerproject_luajava_LuaState_luajava_1open引用@ 16解析的外部符号__imp____iob_func
luajava.obj:错误LNK2019:​​在功能Java_org_keplerproject_luajava_LuaState_luajava_1open引用@ 16解析的外部符号__imp__fprintf
luajava.obj:错误LNK2019:​​在功能Java_org_keplerproject_luajava_LuaState_luajava_1open引用@ 16解析的外部符号__imp__exit
luajava.obj:错误LNK2001:无法解析的外部符号__fltused
LINK:错误LNK2001:无法解析的外部符号@ __DllMainCRTStartup 12
luajava-1.1.dll:致命错误LNK1120:5无法解析的外部
NMAKE:致命错误U1077:P:\\ MS Visual Studio 2010的\\ VC \\ BIN \\ LINK.EXE:回归code0x460
停止。

此外这里是luajava.h 和< A HREF =htt​​ps://drive.google.com/file/d/0B0g-p3J7zGeXTVFjUlJTOFRBR1U/edit?usp=sharing相对=nofollow> luajava.c

所以现在的问题是如何解决这个问题(希望如此,这将至少 LuaStateFactory.newLuaState()工作。openLibs())?


解决方案

我也遇到了这个问题,但后来得到解决。这里是该溶液中。结果,
我已经成功地,64位luajava-64.so,32位动态链接库,等等编译一个64位luajava-64.dll。

下面是步骤。

  1。 VS2010安装2.找到VS2010,Visual Studio工具
打开Visual Studio 64 Win64的命令提示符工具3.下载lua-5.1.5_Win64_vc10_lib.zip
。 (静态库错关键的一点是,这个静态库可以下载错误,或者你下载一个DLL动态库,下载地址:LUA静态库下载:
http://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Static/)
下载luajava-1.1.zip4.打开的config.win修改LUA_DIR和JDK两条路径对自己的道路
请注意,您可能没有低于lib目录下你的LUA_DIR,然后创建你自己的需求,并在其中lua5.1.lib5. CD输入luajava-1.1目录6.运行NMAKE -f Makefile.win7.编译成功
这是在编译时的情况:
C:\\用户\\ softm \\桌面\\ luajava \\ luajava-1.1&GT; NMAKE -f Makefile.win微软(R)程序维护实用10.00.30319.01版本
版权所有(C)微软公司。版权所有。D:\\软\\的Java \\ jdk6_33 \\ BIN \\ javac的-sourcepath ./src/java的src / JAVA /组织/ KEP
lerproject / luajava / CPtr.java
D:\\软\\的Java \\ jdk6_33 \\ BIN \\ javac的-sourcepath ./src/java的src / JAVA /组织/ KEP
lerproject / luajava / JavaFunction.java
注:某些输入文件使用未经检查或不安全的操作。
注:欲了解更多信息,请使用-Xlint:unchecked重新编译。
D:\\软\\的Java \\ jdk6_33 \\ BIN \\ javac的-sourcepath ./src/java的src / JAVA /组织/ KEP
lerproject / luajava / LuaJavaAPI.java
注:某些输入文件使用未经检查或不安全的操作。
注:欲了解更多信息,请使用-Xlint:unchecked重新编译。
D:\\软\\的Java \\ jdk6_33 \\ BIN \\ javac的-sourcepath ./src/java的src / JAVA /组织/ KEP
lerproject / luajava / Console.java
注:某些输入文件使用未经检查或不安全的操作。
注:欲了解更多信息,请使用-Xlint:unchecked重新编译。
CD的src / java的
D:\\软\\的Java \\ jdk6_33 \\ BIN \\罐子CVF ../../luajava-1.1.jar组织/ keplerproje
克拉/ luajava / *。类
标记列表(舱单)
增加:组织/ keplerproject / luajava / Console.class(读= 1921)(写= 1122)(COM pressed 41
%)
增加:组织/ keplerproject / luajava / CPtr.class(读= 510)(写= 359)(29%玉米pression)
增加:组织/ keplerproject / luajava / JavaFunction.class(读= 942)(写= 524)(COM pressed
44%)
增加:组织/ keplerproject / luajava / LuaException.class(读= 556)(写= 352)(COM pressed
36%)
增加:组织/ keplerproject / luajava / LuaInvocationHandler.class(读= 1621)(书= 83
3)(48%玉米pression)
增加:组织/ keplerproject / luajava / LuaJavaAPI.class(读= 7168)(写= 3745)(COM pressed
47%)
增加:组织/ keplerproject / luajava / LuaObject.class(读= 9045)(写= 3978)(COM pressed
56%)
增加:组织/ keplerproject / luajava / LuaState.class(读= 18118)(写= 6435)(COM pressed
64%)
增加:组织/ keplerproject / luajava / LuaStateFactory.class(读= 1293)(写= 722)(pressure
减少44%)
CD ..
CD ..
D:\\软\\的Java \\ jdk6_33 \\ BIN \\ javadoc的-classpathSRC / JAVA /-public -quiet
-dDOC /美国/ API的src / JAVA /组织/ keplerproject / luajava / JavaFunction.java的src / JAVA /
组织/ keplerproject / luajava / LuaException.java的src / JAVA /组织/ keplerproject / luajava /
LuaInvocationHandler.java SRC / JAVA /组织/ keplerproject / luajava / LuaObject.java SR
C /爪哇/组织/ keplerproject / luajava / LuaState.java的src / JAVA /组织/ keplerproject / luaja
VA / LuaStateFactory.java的src / JAVA /组织/ keplerproject / luajava / Console.java
D:\\软\\的Java \\ jdk6_33 \\ BIN \\ JAVAH-o SRC / C / luajava.h -classpathluajava-
1.1.jarorg.keplerproject.luajava.LuaState
CL -nologo -DWIN32 -ID:\\软\\的Java \\ jdk6_33 /包括-ID:\\软\\的Java \\ JDK6
_33 /包括/ win32的-IC:\\用户\\ softm \\桌面\\ luajava \\ LUA \\包括-Fosrc \\ C \\\\ -MD
/ C SRC \\ C \\ luajava.c
luajava.c
链接/ DLL /nodefaultlib:\"msvcrt.lib退房手续:luajava-1.1.dll的src \\ C \\ luajava
.OBJ C:\\用户\\ softm \\桌面\\ luajava \\ LUA \\ LIB \\ lua5.1.lib
微软(R)增量链接器版本10.00.30319.01
版权所有(C)微软公司。版权所有。
创建库luajava-1.1.lib和对象luajava,1.1.exp
luajava.obj:警告LNK4217:本地定义的符号exit函数Java_org_keplerproject
进口_luajava_LuaState_luajava_1open
luajava.obj:警告LNK4217:本地定义的符号函数fprintf Java_org_keplerproj
进口ect_luajava_LuaState_luajava_1open
luajava.obj:警告LNK4217:本地定义的符号__iob_func功能Java_org_keplerp
进口roject_luajava_LuaState_luajava_1open
德尔SRC \\ java的\\组织\\ keplerproject \\ luajava \\ *。类的src \\ C \\ *。 OBJ * .PDB * .EXP *
.lib *会* .EXP .ilk
------------------
构建完整
------------------

Finally I compiled it. Main mistake was about VS enviromental variables. To compile and link proper I needed to type

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

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 causes

Exception 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 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 _Java_org_keplerproject_luajava_LuaState_luajava_1open@16
luajava.obj : error LNK2019: unresolved external symbol __imp__fprintf referenced in function Java_org_keplerproject_luajava_LuaState_luajava_1open@16
luajava.obj : error LNK2019: unresolved external symbol __imp__exit referenced in function Java_org_keplerproject_luajava_LuaState_luajava_1open@16
luajava.obj : error LNK2001: unresolved external symbol "__fltused"
LINK : error LNK2001: unresolved external symbol "__DllMainCRTStartup@12"
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.

Also here is luajava.h and luajava.c

So 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 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
     ------------------

这篇关于LuaJava编译错误&QUOT;解析外部符号&QUOT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆