`

32位和64位,以及跨平台的那点儿事

 
阅读更多
32位和64位,以及跨平台的那点儿事
64位的CPU可以跑 32位或者64位的OS

64位的OS可以跑32位或者64位的JVM

Java是跨平台的, 指得是Java编译成的class文件,可以在(32/64) .* (Oracle/IBM/…) .* (Linux/Win)等不同的JVM实现下面运行,Java源文件在不同的JVM下面不需要重新编译。但在不同的OS下面可能需要安装不同的JVM(这个程度上说,某个JVM实现不是跨平台的)。

怎么判断JVM是多少位的?

http://stackoverflow.com/questions/4574090/installed-jvm-is-64-bit-or-32-bit

怎么得到操作系统级别的信息?

http://stackoverflow.com/questions/4704073/how-can-i-get-system-hardware-info-via-java

http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information

http://www.roseindia.net/java/beginners/OSInformation.shtml

http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking

/com/fr/util/OperatingSystem.java

JNI,Java调用的本地库一般是用其他语言实现比如C等等,它们不是跨平台的,会遇到什么问题?

比如System.loadLibrary(“FRElite4″);在WIN下对应的是个DLL,在Linux下面是个.so/.a文件

再比如,Linux下面,32位下面编译的库,放到64位的JVM(不是OS?)中加载中会出现如下的错误,据说换成32bit的JVM就可以(这个需要测试一下)

http://www.linuxquestions.org/questions/linux-software-2/working-with-32-bit-jvm-on-64-system-sapgui-problem-654041/

1
2
3
4
5
6
7
8
9
10
java.lang.UnsatisfiedLinkError: /usr/lib/libFRElite4.so: /usr/lib/libFRElite4.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at Sense4.Elite4.(Elite4.java:41)
at com.fr.base.core.FRCoreContext.getLockBytes(Unknown Source)
at com.fr.base.core.FRCoreContext.getBytes(Unknown Source)
at com.fr.web.ReportServlet.init(Unknown Source)
飘忽不定的java.library.path,以及操作系统文件访问权限Java加载库文件,就是从System.getProperty(“java.library.path”)这个Path中寻找库的,但是这个默认属性值是由JVM确定的,其规律不太确定-Djava.library.path ..可以控制此属性,但是作为中间件,这个往往不能控制,需要Web服务器或者Resin提供设置,更何况很麻烦System.setProperty(“java.library.path”, “usr/lib:lib”);的做法虽然能动态改变属性值,但是测试过似乎库又不能正常加载。
操作系统文件访问权限这个问题很少遇到上次WIN在下,cache文件位置遇到过一次,这次加密所虽然没遇到过,不过很有可能还会遇到这个问题,作为一个应用程序,只是个Servlet,不是宿主进程,如何获得root权限,修改文件会遇到权限的很多限制。
怎么判断JVM是多少位的?

http://stackoverflow.com/questions/4574090/installed-jvm-is-64-bit-or-32-bit

怎么得到操作系统级别的信息?

http://stackoverflow.com/questions/4704073/how-can-i-get-system-hardware-info-viajava

http://stackoverflow.com/questions/25552/using-java-to-get-os-level-systeminformation

http://www.roseindia.net/java/beginners/OSInformation.shtml

http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking

JNI,Java调用的本地库一般是用其他语言实现比如C等等,它们不是跨平台的,会遇到什么问题?比如System.loadLibrary(“XXX”);在WIN下对应的是个DLL,在Linux下面是个.so/.a文件再比如,Linux下面,32位下面编译的库,放到64位的JVM(不是OS?)中加载中会出现如下的错误,据说换成32bit的JVM就可以(这个需要测试一下)

http://www.linuxquestions.org/questions/linux-software-2/working-with-32-bit-jvm-on-64-system-sapgui-problem-654041/

java.lang.UnsatisfiedLinkError: /usr/lib/libXXX.so: /usr/lib/libXXX.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)

at java.lang.ClassLoader$NativeLibrary.load(Native Method)

at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)

at java.lang.Runtime.loadLibrary0(Runtime.java:823)

at java.lang.System.loadLibrary(System.java:1028)

Java..
分享到:
评论

相关推荐

    32位与64位程序间通信,通过共享内存实现

    本文将深入探讨如何使用共享内存这一技术,让32位和64位的程序在Windows环境下实现通信。 共享内存是一种高效的数据交换机制,它允许多个进程共享同一块内存空间,从而实现数据的快速传递。在32位和64位程序之间...

    java跨平台性

    java 跨平台性 Java 跨平台性是 Java 语言的一项重要特性,它允许 Java 程序在不同的操作系统平台上运行,而不需要重新编译。这种跨平台性是通过 Java 虚拟机(JVM)来实现的。 Java 跨平台性的定义是指 Java ...

    【QGIS跨平台编译】之【libSSH2跨平台编译】:源码及跨平台编译工程(支撑QGIS跨平台编译,以及二次研发)

    QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,包括地图制作、空间分析、数据管理等。QGIS可以在Windows、Mac OS和Linux等操作系统上运行。 QGIS的...

    C++跨平台开发技术指南.pdf

    《C++跨平台开发技术指南》是一本专注于C++语言跨平台开发的实用技术书籍。这本书详细介绍了C++在不同操作系统上,如Windows、Mac OS和Linux上开发应用程序的策略和实践。跨平台开发是软件开发领域中的一个重要方面...

    《C/C++编写跨平台程序:实践篇》

    跨平台编程不仅需要对语言有深入理解,还要熟悉不同操作系统平台之间的差异,以及如何利用跨平台工具和技术来克服这些差异。 C/C++作为一种广泛支持的系统编程语言,具有强大的功能和性能,但在编写跨平台程序时,...

    【QGIS跨平台编译】之【geos跨平台编译】:源码及跨平台编译工程(支撑QGIS跨平台编译,以及二次研发)

    QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,包括地图制作、空间分析、数据管理等。QGIS可以在Windows、Mac OS和Linux等操作系统上运行。 QGIS的...

    C++跨平台开发库win32版

    标题 "C++跨平台开发库win32版" 指出这是一份适用于C++编程的跨平台开发库,特别针对Windows 32位环境进行了优化。这意味着它包含了一系列库文件和头文件,允许开发者在不同的操作系统上构建和运行C++应用程序,同时...

    【QGIS跨平台编译】之【iconv跨平台编译】:源码及跨平台编译工程(支撑QGIS跨平台编译,以及二次研发)

    QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,包括地图制作、空间分析、数据管理等。QGIS可以在Windows、Mac OS和Linux等操作系统上运行。 QGIS的...

    c++跨平台开发

    此外,第三方库如Boost、Qt等也为跨平台开发提供了丰富的功能,这些库通常经过了广泛的测试和优化,可以大大减少开发者的工作量。 #### 3. 构建工具和环境 跨平台开发还涉及构建工具的选择。常见的构建系统如Make...

    wxWidgets跨平台程序开发

    《wxWidgets跨平台程序开发》系统地介绍了wxWidgets及其跨平台程序开发。全书共有20章,第·1·章简要介绍了·wxWidgets·的发展历史和框架结构,第2章介绍了wxWidgets的程序框架及其实现,第3章深入剖析了wxWidgets...

    64位进程调用32位DLL实例

    在现代计算机系统中,64位操作系统同时支持32位和64位应用程序的运行。然而,当64位进程需要调用32位动态链接库(DLL)时,会遇到一些挑战,因为两种架构之间存在兼容性问题。这篇内容将深入探讨64位进程如何调用32...

    【QGIS跨平台编译】之【qwt跨平台编译】:源码及跨平台编译工程(支撑QGIS跨平台编译,以及二次研发)

    QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,包括地图制作、空间分析、数据管理等。QGIS可以在Windows、Mac OS和Linux等操作系统上运行。 QGIS的...

    跨平台的C++播放器

    综上所述,构建跨平台的C++播放器涉及到多个技术领域,包括多媒体处理、图形用户界面设计、多线程编程、文件系统和网络操作,以及错误处理和用户体验优化。通过合理的设计和实现,我们可以创建一个高效、稳定且功能...

    【QGIS跨平台编译】之【zlib跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发)

    QGIS是一个开源的、跨平台的地理信息系统(GIS)软件,用于浏览、编辑和分析地理空间数据,提供了一套丰富的功能,包括地图制作、空间分析、数据管理等。QGIS可以在Windows、Mac OS和Linux等操作系统上运行。 QGIS的...

    一个跨平台的聊天工具

    【标题】:“一个跨平台的聊天工具”所涉及的知识点主要涵盖了软件开发的多个领域,尤其是跨平台应用程序的构建和网络通信技术。 首先,我们来理解“跨平台”的概念。跨平台意味着该聊天工具能够在不同的操作系统上...

    跨平台的socket库,windows-linux-socket

    例如,Boost.Asio提供了一个跨平台的异步I/O模型,可以处理TCP、UDP以及其他协议,同时兼容Windows和Unix-like系统。 在压缩包文件“mysock”中,可能包含了以下内容: 1. `socket.h`:头文件,定义了跨平台的...

    易语言32位进程调用64位DLL函数源码

    在32位和64位系统共存的环境下,如何让32位进程调用64位动态链接库(DLL)的函数是一个常见的挑战。标题和描述所提及的"易语言32位进程调用64位DLL函数源码",正是针对这一问题的一种解决方案。 首先,我们要理解32...

    32位程序调用64位 dll解决办法的例子程序

    - 在Windows中,32位和64位程序的DLL通常通过文件名后缀来区分,如`mylib.dll`(32位)和`mylib_x64.dll`(64位)。确保32位程序调用正确的DLL版本。 6. **示例程序**: - 压缩包中的"ProcOut"和"ProcOutTest...

    跨平台串口通信实例(linux和windows)

    在IT行业中,跨平台串口通信是一个至关重要的技术领域,特别是在设备控制、嵌入式系统以及物联网(IoT)应用中。本实例着重探讨如何在Linux和Windows操作系统之间实现串口通信,这对于开发者来说是非常实用的技能。...

Global site tag (gtag.js) - Google Analytics