屏蔽系统差异

使用

#include "osplatformutil.h"

#ifdef I_OS_WIN
typedef __int64 int64;           ///< 64 bit signed windows 定义windows int64
#define DLL_EXPORT __declspec(dllexport) ///< define DLL_EXPORT windows 定义windows导出函数
#elif defined I_OS_UNIX
typedef long long int64;           ///< 64 bit signed unix 定义Unix int64
#define DLL_EXPORT     __attribute__((visibility("default"))) ///< define DLL_EXPORT unix 定义Unix导出函数
#else
//Not support
#endif // I_OS_WIN



#ifdef I_OS_WIN
#include "SerialPortWinBase.h"
#define CSERIALPORTBASE CSerialPortWinBase
#elif defined I_OS_UNIX
#include "SerialPortUnixBase.h"
#define CSERIALPORTBASE CSerialPortUnixBase
#else
//Not support
#define CSERIALPORTBASE
#endif // I_OS_WIN

osplatformutil.h

#ifndef OSPLATFORMUTIL_H
#define OSPLATFORMUTIL_H

/*
   The operating system, must be one of: (I_OS_x)

     DARWIN   - Any Darwin system (macOS, iOS, watchOS, tvOS)
	 ANDROID  - Android platform
	 WIN32    - Win32 (Windows 2000/XP/Vista/7 and Windows Server 2003/2008)
	 WINRT    - WinRT (Windows Runtime)
	 CYGWIN   - Cygwin
	 LINUX    - Linux
	 FREEBSD  - FreeBSD
	 OPENBSD  - OpenBSD
	 SOLARIS  - Sun Solaris
	 AIX      - AIX
     UNIX     - Any UNIX BSD/SYSV system
*/

#define OS_PLATFORM_UTIL_VERSION 1.0.0.180723

// DARWIN
#if defined(__APPLE__) && (defined(__GNUC__) || defined(__xlC__) || defined(__xlc__))
#  include <TargetConditionals.h>
#  if defined(TARGET_OS_MAC) && TARGET_OS_MAC
#    define I_OS_DARWIN
#    ifdef __LP64__
#      define I_OS_DARWIN64
#    else
#      define I_OS_DARWIN32
#    endif
#  else
#    error "not support this Apple platform"
#  endif
// ANDROID
#elif defined(__ANDROID__) || defined(ANDROID)
#  define I_OS_ANDROID
#  define I_OS_LINUX
// Windows
#elif !defined(SAG_COM) && (!defined(WINAPI_FAMILY) || WINAPI_FAMILY==WINAPI_FAMILY_DESKTOP_APP) && (defined(WIN64) || defined(_WIN64) || defined(__WIN64__))
#  define I_OS_WIN32
#  define I_OS_WIN64
#elif !defined(SAG_COM) && (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__))
#  if defined(WINAPI_FAMILY)
#    ifndef WINAPI_FAMILY_PC_APP
#      define WINAPI_FAMILY_PC_APP WINAPI_FAMILY_APP
#    endif
#    if defined(WINAPI_FAMILY_PHONE_APP) && WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
#      define I_OS_WINRT
#    elif WINAPI_FAMILY==WINAPI_FAMILY_PC_APP
#      define I_OS_WINRT
#    else
#      define I_OS_WIN32
#    endif
#  else
#    define I_OS_WIN32
#  endif
//CYGWIN
#elif defined(__CYGWIN__)
#  define I_OS_CYGWIN
// sun os
#elif defined(__sun) || defined(sun)
#  define I_OS_SOLARIS
// LINUX
#elif defined(__linux__) || defined(__linux)
#  define I_OS_LINUX
// FREEBSD
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
#  ifndef __FreeBSD_kernel__
#    define I_OS_FREEBSD
#  endif
#  define I_OS_FREEBSD_KERNEL
// OPENBSD
#elif defined(__OpenBSD__)
#  define I_OS_OPENBSD
// IBM AIX
#elif defined(_AIX)
#  define I_OS_AIX
#else
#  error "not support this OS"
#endif

#if defined(I_OS_WIN32) || defined(I_OS_WIN64) || defined(I_OS_WINRT)
#  define I_OS_WIN
#endif

#if defined(I_OS_WIN)
#  undef I_OS_UNIX
#elif !defined(I_OS_UNIX)
#  define I_OS_UNIX
#endif

#ifdef I_OS_DARWIN
#define I_OS_MAC
#endif
#ifdef I_OS_DARWIN32
#define I_OS_MAC32
#endif
#ifdef I_OS_DARWIN64
#define I_OS_MAC64
#endif

#endif // OSPLATFORMUTIL_H
<think>嗯,用户问的是Java程序编译后用来运行代码并屏蔽系统差异性的部分。首先,我得确认自己是否理解正确。Java的特点之一是跨平台,这主要得益于它的字节码和虚拟机机制。 那么,用户提到的“运行编译后的代码”应该是指将.java文件编译成.class文件后的执行过程。而“屏蔽系统差异性”应该是指同一份字节码可以在不同操作系统上运行,无需修改。这时候,核心答案应该是JVM(Java虚拟机),但可能需要详细解释。 再想一下,JVM的作用确实是加载字节码,解释或编译执行,同时处理不同操作系统的底层细节,比如内存管理、线程调度等。这样开发者不需要为每个系统重写代码,只需在不同平台上安装对应的JVM即可。 不过,用户可能对JVM和JRE的关系不太清楚,所以需要区分这两者。JRE(Java运行时环境)包含JVM和核心类库,而JDK是开发工具包。用户问的是运行环境,所以应该包括JRE中的JVM部分。 另外,可能需要提到字节码(.class文件)作为中间格式,由JVM执行,这样无论什么系统,只要有对应的JVM,就能运行同样的字节码。这也解释了为什么Java能跨平台。 是否有其他可能?比如,是否涉及编译器?不过javac编译器生成的是字节码,而运行的是JVM,所以重点在JVM。另外,JIT编译器是JVM的一部分,属于运行时的优化,可能不需要深入。 总结,回答的结构应该是先点出JVM,然后解释其作用,包括字节码的执行、跨平台原理,可能提到JRE作为运行环境。确保用户明白JVM如何屏蔽系统差异,使得一次编写,到处运行成为可能。</think>运行Java程序编译后的代码并屏蔽系统差异性的核心组件是: Java虚拟机(JVM,Java Virtual Machine) 具体原理如下: 1. **编译过程** - Java源码(.java文件)通过javac编译器生成字节码(.class文件),字节码是与平台无关的中间格式。 2. **JVM的核心作用** - 采用"一次编写,到处运行"(Write Once, Run Anywhere)机制 - 解释器将字节码逐行转换为当前系统的原生机器码 - 即时编译器(JIT)对热点代码进行优化编译 - 统一内存管理(自动垃圾回收机制) - 提供跨平台的统一API接口 3. **系统差异屏蔽实现** $$ \text{Java字节码} \xrightarrow{\text{JVM解释/编译}} \text{本机机器指令} $$ - Windows/Linux/macOS等系统有各自对应的JVM实现 - 开发者无需关心底层系统调用的差异 4. **运行环境组成** - JVM需要配合Java运行时环境(JRE)使用 - JRE = JVM + 核心类库 + 其他支持文件 示例:同一份.class文件在不同系统上的运行过程 ``` Windows系统:.class → Windows JVM → 执行 Linux系统: .class → Linux JVM → 执行 macOS系统: .class → macOS JVM → 执行 ``` 这种设计使Java成为最早实现真正跨平台特性的编程语言之一。开发者只需确保目标系统安装了对应版本的JRE/JVM,即可保证程序的无差异运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值