您当前位置:首页 > 网管文库 > 操作系统 > Unix

如何使用 GCJ 进行二进制兼容性编译

大势至可以提供从上网行为管理到电脑文件防泄漏、企业数据防泄密一站式解决方案
聚生网管软件下载 是一款专业的上网行为管理系统,有效控制局域网网速、限制网络流量、禁止电脑玩网络游戏、禁止局域网迅雷下载上传、屏蔽网页视频、进行IP和MAC地址绑定、禁止无线路由器接入局域网等
大势至共享文件管理系统下载 是一款专门设置服务器共享文件访问权限,详细记录共享文件访问日志。设置共享文件访问权限,只让读取共享文件而禁止拷贝共享文件、只让修改共享文件而禁止删除共享文件、只让打开共享文件而禁止另存为本地磁盘,禁止拖拽共享文件和打印共享文件等,保护共享安全。
大势至电脑文件防泄密系统下载 是一款有效禁止U盘使用、禁用USB存储设备使用,可以只让使用特定U盘、向USB存储设备复制文件必须输入密码,以及禁止发送邮件附件、禁止使用网盘上传文件、禁止FTP文件上传以及禁止QQ发送文件、禁止微信发送文件等方式泄漏电脑文件,实现企业数据防泄密。
大势至网络准入系统下载 是一款有效禁止外来电脑接入局域网,实现局域网接入认证,禁止外来电脑访问局域网共享文件、禁止局域网电脑修改IP地址、绑定IP和MAC地址、禁止无线路由器接入局域网、隔离局域网电脑,实现局域网网络准入控制。

  关于具有二进制兼容性的应用程序二进制接口 GCJ 的说明

  许多 Java 应用程序假定它们将只会由一个 Java 虚拟机解释,而不是由一个像 GCJ 一样与时俱进的编译器进行本地编译的。

  这些 Java 应用程序可能假设自己很难在没有经过重大源代码修改情况下进行本地编译的运行环境中运行。显然,在读取字节码流并使用 ClassLoader.defineClass() 方法把它们载入为类的时候,这些应用程序含有它们自己的代码。

  可以看到那是一个怎样的问题,因为没有字节码流是用于一个本地编译了的类的。如果本地编译一个使用 defaineClass() 的程序,当你要结束一个类,这个类尝试为可能不曾以字节码存在的别的类读取一个字节码流,这是无法实现的。更进一步,当你本地编译一个类,指望它载入其他类的时候,过去默认的是相当于只把它作为一个本地编译了的类给找出来。

  考虑到这个问题,GCJ 4 有一个新的编译模式,称为间接发布,它使用新的具有二进制兼容性的应用程序二进制接口。如果你喜欢,你可以把旧的编译模式当作“直接发布”。详情请参阅 ftp://gcc.gnu.org/pub/gcc/summit/2004/GCJ%20New%20ABI.pdf

  简而言之,为了完成它的工作,GCJ 使用 gcj-dbtool(参阅 gcj-dbtool(1)),它产生一个稍后由 GCJ 使用的“。db”文件。想法是,首先使用 -findirect-dispatch 选项对你的 .jar 或 .class 文件(你打算本地编译的应用程序依赖这些文件)进行本地编译。然后使用 gcj-dbtool 把放在一个 .db 数据库文件中的关于那些本地编译了的类的信息存储起来。

  在你正在构建的程序的本地编译过程中,当 GCJ 看到 defineClass() 准备被调用的时候,就把已经通过了的字节码跟共享库匹配(使用 .db 文件中的映射表),这些共享库包含你已经本地编译了的类。

  从一个类到在 .db 文件中的编译形式的映射,映射为一个类的签名(一个加密校验和)到一个共享库。你可以把它看成像使用一种缓存的 JIT 一样使用 GCJ.

  还有其他关于具有二进制兼容性的应用程序二进制接口的重要细节,这些细节用于确定本地代码遵循某些二进制兼容性规则。这对于让本地代码在处理 .class 文件时得以正确执行是个不错的辅助作用。 :)

  大部分典型的不使用自定义类加载器(classloaders)的 Java 应用程序不必为此担心。具有二进制兼容性的应用程序二进制接口可以为你正在不依赖 gcj-dbtool 地构建中的代码启用(通过把 -findirect-dispatch 选项传给 gcj )而生成一个二进制程序,它应该不理会对 libgcj 和其他依赖的类库的修改而继续工作(参阅 gcj(1))。另一方面,如果你使用旧的“C++ 应用程序二进制接口”风格(即不使用 -findirect-dispatch 选项)编译一个应用程序,它会在对所依赖类库的公共 API 的发生任何修改时马上中断 ―― 就像 C++ 一样。在过去,正如你可以想象的,这是一个重大的限制并且是更广泛应用 GCJ 的一个障碍。

  在启用了二进制兼容性的本地编译构建完成以后,对于外界来说,原始的应用程序仍然做着它以前一直在做的事 ―― 例如,和往常一样从一些没有本地编译过的 .jar 文件中载入字节码。然而,defineClass() 过去一直在做的调用过程现在已经被改进了;它们首先尝试找出所寻找的类的一个本地编译形式(很可能现在在一个共享库中),如果没有找到本地编译了的类的话,则回去解释 .class 文件(很可能在一个 .jar 文件中)。

  如果你希望能从本地代码中调用解释代码,你需要在构建本地代码时使用 -findirect-dispatch 选项。如果不使用间接发布,你的代码将不能够在需要时载入字节码形式的类。如果在代码中你从来没有提及过“new ThatClassIWant();”的话,你可以私下实现这种需求,手动加载类,并使用工厂模式,但那会很快变得单调乏味。

  从解释代码中调用本地代码会工作得很好,无需关心应用程序二进制接口。对解释代码使用间接发布在定义上是缺省的。没错,为本地编译而使用 -findirect-dispatch 选项应该是缺省的,但仍未如此 ―― 大部分是因为它还没完善。主要存在的障碍如下:

  CNI,因为 C++ 编译器仍不明白具有二进制兼容性的应用程序二进制接口

  并且当被使用于源代码编译时(即从 .java 到 .class),程序缺陷(bug(s))会影响 -findirect-dispatch 选项。

  当然, 目标是只要问题一解决就马上把二进制兼容性作为应用程序二进制接口的缺省的特性。

  还有一个来自具有二进制兼容性的应用程序二进制接口的性能打击。Bryce McKinlay 完成的测试表明这与多数应用程序关系不大(<= 10%),但若让它拥有更多数据会比较好。

  编译 JAR

  重要:有些时候当 -findirect-dispatch 选项直接从 Java 源文件编译为本地代码的时候并不总是可以工作的。那种情况仍未完全实现(在 gcj 4.0.x 时),且不被支持。唯一被支持的带有 -findirect-dispatch 选项的编译方式就是在这里说明了的方式。

  较早步是在应用程序中编译所有 JAR 文件。例如:

  gcj -shared -findirect-dispatch -Wl,-Bsymbolic -fjni -fPIC myapp.jar -o myapp.jar.so

  这将编译所有包含了的类。注意,没有要求设置类路径(classpath);通过具有二进制兼容性的应用程序二进制接口,所有类在运行时被链接。当使用 -findirect-dispatch 选项时当前必须使用 -Wl,-Bsymbolic 选项。

  设置数据库

  首先创建一个数据库。

  gcj-dbtool -n myapp.db

  现在,添加所有编译了的 jar 文件到数据库,例如:

  gcj-dbtool -a myapp.db myapp.jar myapp.jar.so

  运行

  现在可以运行你的应用程序了。用 gij 启动它,正如你用 Java 命令启动它一样。然而,还要把 gij 指向你创建的 .db 文件:

  gij ――cp myapp.jar -Dgnu.gcj.precompiled.db.path=myapp.db org.package.ClassName etc

  注意:应用程序的 jar 文件仍然需要在 classpath 中。

  便利方法

  你有一堆 JAR 文件而又有点懒于手工完成所有的二进制兼容性编译工作吗?这里有一份脚本,遍历进入每个目录,用 GCJ 处理每个 JAR 文件并把新的库添加到数据库文件中。

#!/bin/sh
# ${1} is the name of a GCJ database file
gcj-dbtool -n ${1}
for JAR_FILE in `find -iname "*.jar"`
do
        echo "Compiling ${JAR_FILE} to native"
        gcj -shared -findirect-dispatch -Wl,-Bsymbolic -fjni -fPIC -o ${JAR_FILE}.so ${JAR_FILE}
        gcj-dbtool -a ${1} ${JAR_FILE} ${JAR_FILE}.so
done

  以数据库文件的名字调用这份脚本并稍等片刻。如果所有事情都完成了,这将会给你生成所有的本地库以及一个满载的数据库,这些库和数据库现在可以用于使用 GCJ 来运行应用程序了。

  范例

  对一些现实的例子感兴趣吗?进入 《Classpath 用例》 页面。在那里你可以看到构建本地的 Eclipse 是多么容易。

  故障纠纷

  1. 我如何区分代码是运行于解释模式还是本地模式呢?

  在 gdb 下运行应用程序,在你的代码中设置一个断点。设置在被解释的代码中的断点会完全不能工作(然而,某些断点可能因为 gdb 的其他程序缺陷而工作失效,因此不要依赖它作为一种迹象),并且被解释的代码将以 _Jv_InterpMethod::run 或类似的形式出现在 gdb 的后台跟踪中。

  作为一种选择,在 gij 4.0 中有一个奇怪现象可以利用。gij 中的栈跟踪将显示若干行“(Unknown Source)”,就是正在被解释的代码,而显示库名称的就是被编译的代码。

  注意:这个“(Unknown Source)”的奇怪现象将在 4.1 中去除。

  2. 即使按照上面的说明去做,我的代码仍运行在解释模式中。为什么呢?

  在 gcc 4.0 中,。jar.so 文件由于某些原因而载入失败时不会有没有错误报告 ―― 它们只是默默地被忽略。这个策略在以后可能会改变。

  对于代码不能正确运行于解释模式有两个很大可能的原因:

  a)你忘记了使用 JNI(Java 本地接口)的 -fjni 编译器选项编译代码。这种情况下虚拟机将在每当它尝试载入与那些库相关的类的时候,重复尝试载入链接库并失败。(链接库失败是因为它尝试以 CNI 形式链接,那是失败的。)

  或者

  b)你的映射文件(例如 class.db)过时了,或者没有在 gnu.gcj.compiled.db.path 中。

  3. 当我在 gdb 下运行应用程序时,gdb 把我的库一次又一次地载入很多次。

  你大概忘记了在编译时指定 -fjni 选项。请参阅上面 2.a 部分的内容。

大势至软件官网,指定阿里旺旺登录账号,学校上网管理,网速监控软件,禁止qq游戏运行,公司监控员工电脑

大势至公司可以独家提供从局域网网络行为管理、电脑资料防止泄密管控和信息安全防护一站式解决方案
聚生网管网络管理系统下载 是一款专门的办公室电脑监控软件、局域网网络控制软件,可以禁止网络游戏、禁止上班炒股、禁止P2P软件下载、禁止在线看视频、局域网限制别人网速等,以及绑定局域网IP和MAC地址,防止ARP攻击行为等。
大势至文件共享管理软件下载 是一款专门的共享文件夹访问日志记录软件、服务器共享文件访问权限设置软件,可以实现只让读取共享文件而禁止复制共享文件、只让打开共享文件而禁止另存为本地和禁止拖拽共享文件以及只让修改共享文件而禁止删除共享文件,保护服务器共享文件安全,防止共享文件越权访问。
大势至企业数据泄密防护系统下载 是一款专门保护电脑文件安全,防止U盘复制文件、禁用USB端口的软件,同时还可以屏蔽邮件附件、禁止登录网盘上传文件、禁止FTP软件发送文件、禁止微信发送文件、禁止QQ发送文件等,防止各种途径泄密。
大势至局域网接入认证系统下载 是一款专业的局域网网络准入控制系统,有效阻止外来电脑接入局域网、禁止外来上网上网、禁止非单位电脑访问局域网共享文件、隔离局域网电脑、进行IP和MAC地址绑定、禁止修改IP地址等,保护局域网安全。
大势至公司网络管理产品:
 
1、聚生网管局域网流量管理工具软件(点击下载),是国内最早、最专业的局域网监控软件、上网行为控制系统,可以有效管理公司局域网电脑上网行为,有效屏蔽迅雷下载、禁止迅雷上传,禁止pps上传、禁止看qq直播、禁止局域网玩游戏、禁止登录QQ游戏大厅、禁止员工炒股、限制上班看电影、进行局域网带宽限制、控制打开网页、禁止局域网网购、监控邮件内容、监控邮件附件、记录论坛发帖留言、防ARP攻击、查找局域网手机、禁止手机接入公司局域网、禁止私自安装无线路由器上网、防止无线局域网蹭网等;

2、网络特警上网行为管理设备(点击下载),专业的上网行为管理服务器、比上网行为管理路由器、上网管理路由器更强大,可以有效禁止电脑游戏、屏蔽网页游戏、限制局域网看视频、禁止别人看视频、限制P2P软件使用、禁止快车下载、局域网控制迅雷下载、限制股票软件、禁止上班炒股行为、进行局域网流量监控、限制带宽软件,禁止员工网络购物、屏蔽购物网站、屏蔽网页视频网站,并且独创了“创新直连”监控模式,国内最快捷、最简单、最安全控制多网段电脑上网行为,监控效率和综合性能最强的硬件网络管理系统、上网行为管理系统。

3、大势至USB端口管理工具(点击下载),一款强大的USB端口控制系统,有效禁用USB端口使用、屏蔽U口、禁止电脑使用U盘、屏蔽优盘使用、禁用优盘,禁止移动硬盘使用、禁止手机存储卡使用,可以有效地屏蔽USB存储设备而不影响USB鼠标键盘和非USB设备的使用;同时,还可以禁止修改注册表、禁止修改组策略、禁止修改msconfig启动项、禁止修改计算机管理、禁止F8键进入安全模式、禁止U盘启动电脑、禁止光驱启动电脑;此外,还可以只允许电脑访问特定网站,只让打开特定程序、只让运行特定软件或者禁止运行某些程序、禁止访问某些网站等;

4、大势至文件共享服务器监控软件(点击下载),是一款强大的共享文件服务器监控软件、服务器文件管理系统、服务器文件访问控制软件,最有效监控服务器共享文件的访问,详细记录修改服务器共享文件、删除服务器共享文件、复制服务器共享文件、剪切服务器共享文件或者打印服务器共享文件的行为,以及重命名共享文件等;同时,记录访问共享文件者的IP地址、MAC地址、主机名和域账号等信息,从而可以为网管员提供详细的服务器文件访问日志,便于加强服务器共享文件管理,保护单位无形资产和商业机密等;

5、大势至局域网网络准入管理系统(点击下载),是一款专业的公司局域网接入管理软件、内网接入控制系统,可以有效防止非公司电脑访问公司局域网、禁止外部电脑访问公司局域网、限制外来电脑接入公司局域网、禁止手机接入公司局域网、禁止手机无线上网、限制平板电脑无线上网,检测局域网处于混杂模式的网卡,防止局域网抓包、防止局域网嗅探;同时,还可以查找局域网无线路由器,禁止无线路由器接入公司局域网,禁止无线路由器上网,禁止局域网启用代理,限制员工代理上网,禁止电脑安装代理软件为其他电脑提供代理上网服务等;

6、大势至共享文件夹权限设置软件(点击下载),是一款专门由于管理共享文件访问、进行共享文件访问权限设置的软件,通过在开启共享文件的电脑或服务器安装以后就可以为本地账号分配共享文件的不同访问权限,这样局域网用户访问共享文件的时候就只能“读取”共享文件而禁止拷贝共享文件的内容、禁止将共享文件另存为本地磁盘、禁止打印共享文件;同时,对共享文件加密后用户访问共享文件的时候将被限定在一个特定的共享文件列表框内访问操作,可以禁止拖拽共享文件、禁止拷贝共享文件、禁止剪切共享文件到访问者自己的电脑,从而也可以防止U盘复制共享文件、防止通过网盘上传共享文件、防止通过FTP上传共享文件以及防止通过QQ将共享文件发送到外面去,从而全面保护了共享文件的安全。

7、大势至FTP服务器文件操作记录软件(点击下载) ,是一款专门监控FTP服务器文件访问操作日志的软件,可以详细记录局域网用户对FTP服务器文件的上传、下载、修改、删除、重命名等操作日志,可以记录访问者的FTP账户、IP地址、MAC地址和主机名等信息,并可以将FTP服务器文件操作日志导出为Excel格式,从而便于网管员实时审计局域网用户对FTP服务器文件上传和FTP服务器下载文件的情况,便于更好地保护FTP服务器的文件安全,保护单位无形资产和商业机密。

点击量:1000
公司简介:大势至公司是国内较早的企业网管软件提供商,可以为企事业单位提供整体的企业网络管理方案和企业网络管理平台,通过全系列的公司监控员工电脑软件教你如何控制员工上网、如何控制局域网内电脑上网以及如何保护电脑文件安全等。公司核心产品“聚生网管系统”是一款专门的公司网管必备软件、查看网络流量软件、网络流量监控软件和办公室电脑监控软件;“网络特警”则是一款专门的网络流量监控设备、上网行为管理服务器、网络行为管理设备,可以实现更为强大的局域网网络行为管理;大势至USB接口禁用软件则是一款专门的数据防泄密产品、屏蔽U盘软件、电脑USB端口禁用软件,可以严防通过一切途径泄露电脑文件,保护单位无形资产和商业机密安全;大势至共享文件夹管理软件则是一款专门的共享文件权限设置软件和共享文件设置密码软件,全面保护共享文件安全;大势至共享文件审计系统则是一款专门的服务器共享文件夹设置软件、服务器共享文件访问日志记录软件,可以详细记录局域网用户访问共享文件的行为,更好地管理共享文件的安全;大势至局域网网络准入控制系统则是一款专门防止未经授权的电脑接入公司局域网的行为,防止外来电脑访问局域网共享文件、防止蹭网以及绑定IP和MAC地址,保护网络安全;大势至FTP服务器日志记录软件则是一款专门记录局域网用户访问FTP服务器日志的软件,可以有效保护FTP服务器文件安全。
收缩

售前咨询

  • 电话:010-82825512
  • 电话:010-82825051
  • 电话:010-82825052
  • 电话:010-62656060

技术支持

  • 电话:010-82825062