星期一, 四月 29, 2013
Open JPA
2.openjpa编译及enhance需要antlr,具体的版本可以example里例子里目录下查看build.properties里的antlr.version=3.2
3.下载antlr ,http://www.antlr.org/download.html,如果不是最新的版本,可以从 https://github.com/antlr/ 目录里寻找具体的版本下载,你需要:antlr-runtime-3.2.jar和antlr-3.2.jar两个.jar文件。
4.修改build.properties,修改对应的openjpa和antlr lib目录。
5.修改build.xml 对应的ant 脚本 property指向具体的jpa lib和antlr lib
6.运行ant build.xml开始编译例子程序。
星期三, 四月 10, 2013
git for window 如何保存提交到code.google.com的用户名及密码
首先在window %HOME%变量制定的目录下建立_netrc文件,
注意是_netrc不是.netrc或者netrc.
可以在window cmd下使用echo %HOME%看到具体的目录。
_netrc文件里放入一下字符串即可:注意是_netrc不是.netrc或者netrc.
可以在window cmd下使用echo %HOME%看到具体的目录。
git add *
git commit -m "commit source code by....."
git commit -m "commit source code by....."
git push
星期二, 四月 09, 2013
如何在 window 下手动建立GIT project在code.google.com上
git init
git add *
git commit -m "initial project version"
git remote add master https://code.google.com/p/myproject/
git push master --all
星期二, 四月 02, 2013
编写自己的Wrapper Class
编写自己的Wrapper Class
A URL Connection to a Java ARchive (JAR) file or an entry in a JAR file.
The syntax of a JAR URL is:
jar:<url>!/{entry}
参考: java.net.JarURLConnection
http://java.sun.com/j2se/1.4.2/docs/api/java/net/JarURLConnection.html
目的:要解决在可执行Jar文件中使用包含在其他地方的Jar文件中的class.
初级方法:使用Java extension机制,通过编写启动脚本来解决问题:
把第三方的Jar Library复制到{java home}\jre\lib\ext 目录下
或使用java ?Xbootclasspath 命令行参数:
-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
大多数的Java 应用服务器都使用了制作启动脚本的方法.
例子: 脚本run.bat 可以参看Jboss Application的run.bat或run.sh脚本
中级方法: 利用Jar 扩展机制规范,通过制作安装包来解决问题.
利用Jar包扩展(extension)机制通过Manifest Specification 来编写
参考: http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html
利用META-INF/MANIFEST.MF文件中的Class-Path:来指定需要引用的第三包,
将需要的第三方包放到在Class-Path:指定的目录下,然后把主程序jar包和第三包
制作安装包,在安装的时候按照目录结构安装。然后SystemClassLoader(sun.misc.Launcher)
自动加载
高级方法,编写自己的Container类或bootStrap Wrapper类.
思路:实现一个Custom ClassLoader-系统类java.开头的类让SysemClassLoader来载入,
其他的类用CustomClassLoader读取给出的Jar Library 包来实现.
最终实现 Class.forName(String name)自动使用Custom ClassLoader来寻找和加载class.
这里需要介绍一些Java ClassLoader的一些限制的知识,ClassLoader的详细原理,可以参看
其他相关介绍.
Hack Java:
强行设置系统默认的ClassLoader,有作用吗?No
Field tclass = ClassLoader.class.getDeclaredField("scl");
tclass.setAccessible(true);
tclass.set(null,Mydefault);
JVM的 SystemClassLoader是 sun.misc.Luncher的实例,这里面包含native的本地方法,
其中工作算法不得而之,JVM唯一给我们留下的扩展机制就是改变ContextClassLoader来实现
JVM的ClassLoader委托模式(delegation mode).
详细介绍:
Custom ClassLoader代码
/**
* Don't Reinvent wheel
* 使用 URLClassLoader 来载入Jar Library
*
*/
import java.io.InputStream;
import java.io.File;
import java.net.URLClassLoader;
import java.util.*;
import java.net.URL;
public class myClassLoaderByURL extends java.lang.ClassLoader
{
static java.net.URL _url=null;
static String libpath=null;
public static myClassLoaderByURL defaultld=null;
public myClassLoaderByURL(String liburl,ClassLoader parent) throws Exception
{
super(parent);
if(!checkJar(liburl))
{
throw new java.lang.RuntimeException("Jar File "+liburl+" not exist");
}
try
{
_url = new URL("jar:file:/"+liburl+"!/");
}catch(Exception e)
{
e.printStackTrace();
}
}
protected Class findClass(String name) throws ClassNotFoundException
{
Class speClass=null;
try
{
speClass = getParent().loadClass(name );
System.out.println("myClassLoaderByURL Msg: parent CLD find Class............"+name);
} catch( ClassNotFoundException cnfe )
{
try
{
String rname = name;
rname = rname.replace ('.', '/') + ".class";//重要,必须还原为目录格式
System.out.println("myClassLoaderByURL Msg: Option jar Lib:"+_url.toExternalForm());
System.out.println("myClassLoaderByURL Msg: find class name:"+rname);
URLClassLoader ucld = new URLClassLoader(new URL[]{_url},myClassLoaderByURL.class.getClassLoader());
InputStream is = ucld.getResourceAsStream(rname);
if(is==null)
{
throw new ClassNotFoundException(" Can't Find Specified Class:"+name);
}
int size=is.available();
byte[] b = new byte[size];
is.read(b,0,size);
is.close();
speClass = defineClass(name,b,0,b.length);
}catch(Exception ioe)
{
ioe.printStackTrace();
throw new ClassNotFoundException();
}
}catch(Exception ce)
{
ce.printStackTrace();
throw new ClassNotFoundException();
}
System.out.println("myClassLoaderByURL Msg: ok,load success");
return speClass;
}
public Class loadClass( String pClassName, boolean pResolve ) throws ClassNotFoundException {
System.out.println("myClassLoaderByURL Msg:loadClass(), resolve: " + pResolve );
Class lClass = findLoadedClass( pClassName );
lClass = findClass( pClassName );
//ResolveClass.
try {
if( pResolve ) {
System.out.println("myClassLoaderByURL Msg:resolve class: " + lClass );
resolveClass( lClass );
}
} catch (Error e) {
e.printStackTrace();
throw e;
}
return lClass;
}
public Class loadClass( String pClassName) throws ClassNotFoundException
{
Class t =loadClass(pClassName,true);
return t;
}
private boolean checkJar(String jarfile)
{
System.out.println("myClassLoaderByURL Msg: checkJar:"+jarfile);
File jarf = new File(jarfile);
try
{
System.out.println(jarf.getCanonicalFile());
}catch(Exception ee)
{
}
return jarf.exists();
}
}
编写自己的Boot Wrapper类:
import java.io.*;
import java.util.zip.*;
import java.util.jar.*;
import java.net.URLClassLoader;
import java.net.URL;
import java.lang.reflect.Method;
public class testClassLoaderByURL extends java.lang.Thread
{
static myClassLoaderByURL Mydefault;
static String JarLibraryPath="";
static String executedClass = "";
public static void main(String[] args) throws Exception
{
if(args.length <2)
{
System.out.println("Syntax testClassLoaderByURL /path/xx.jar Executable class name(include main method");
System.out.println("Example: java testClassLoaderByURL c:\\temp\\test.jar org.sun.go");
System.exit(0);
}
JarLibraryPath=args[0];
executedClass = args[1];
//here can verified parameter
System.out.println("Jar is:"+JarLibraryPath+", Class is:"+executedClass);
System.out.println("Begin Load");
Mydefault = new myClassLoaderByURL(JarLibraryPath,testClassLoader.class.getClassLoader());
myClassLoaderByURL.defaultld = Mydefault;
Thread.currentThread().setContextClassLoader(Mydefault);
Class cls = Mydefault.loadClass(executedClass);//重要.
Method main = cls.getMethod("main", new Class[]{String[].class});
main.invoke(cls, new Object[]{args});
}
}
A URL Connection to a Java ARchive (JAR) file or an entry in a JAR file.
The syntax of a JAR URL is:
jar:<url>!/{entry}
参考: java.net.JarURLConnection
http://java.sun.com/j2se/1.4.2/docs/api/java/net/JarURLConnection.html
目的:要解决在可执行Jar文件中使用包含在其他地方的Jar文件中的class.
初级方法:使用Java extension机制,通过编写启动脚本来解决问题:
把第三方的Jar Library复制到{java home}\jre\lib\ext 目录下
或使用java ?Xbootclasspath 命令行参数:
-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
大多数的Java 应用服务器都使用了制作启动脚本的方法.
例子: 脚本run.bat 可以参看Jboss Application的run.bat或run.sh脚本
中级方法: 利用Jar 扩展机制规范,通过制作安装包来解决问题.
利用Jar包扩展(extension)机制通过Manifest Specification 来编写
参考: http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html
利用META-INF/MANIFEST.MF文件中的Class-Path:来指定需要引用的第三包,
将需要的第三方包放到在Class-Path:指定的目录下,然后把主程序jar包和第三包
制作安装包,在安装的时候按照目录结构安装。然后SystemClassLoader(sun.misc.Launcher)
自动加载
高级方法,编写自己的Container类或bootStrap Wrapper类.
思路:实现一个Custom ClassLoader-系统类java.开头的类让SysemClassLoader来载入,
其他的类用CustomClassLoader读取给出的Jar Library 包来实现.
最终实现 Class.forName(String name)自动使用Custom ClassLoader来寻找和加载class.
这里需要介绍一些Java ClassLoader的一些限制的知识,ClassLoader的详细原理,可以参看
其他相关介绍.
Hack Java:
强行设置系统默认的ClassLoader,有作用吗?No
Field tclass = ClassLoader.class.getDeclaredField("scl");
tclass.setAccessible(true);
tclass.set(null,Mydefault);
JVM的 SystemClassLoader是 sun.misc.Luncher的实例,这里面包含native的本地方法,
其中工作算法不得而之,JVM唯一给我们留下的扩展机制就是改变ContextClassLoader来实现
JVM的ClassLoader委托模式(delegation mode).
详细介绍:
Custom ClassLoader代码
/**
* Don't Reinvent wheel
* 使用 URLClassLoader 来载入Jar Library
*
*/
import java.io.InputStream;
import java.io.File;
import java.net.URLClassLoader;
import java.util.*;
import java.net.URL;
public class myClassLoaderByURL extends java.lang.ClassLoader
{
static java.net.URL _url=null;
static String libpath=null;
public static myClassLoaderByURL defaultld=null;
public myClassLoaderByURL(String liburl,ClassLoader parent) throws Exception
{
super(parent);
if(!checkJar(liburl))
{
throw new java.lang.RuntimeException("Jar File "+liburl+" not exist");
}
try
{
_url = new URL("jar:file:/"+liburl+"!/");
}catch(Exception e)
{
e.printStackTrace();
}
}
protected Class findClass(String name) throws ClassNotFoundException
{
Class speClass=null;
try
{
speClass = getParent().loadClass(name );
System.out.println("myClassLoaderByURL Msg: parent CLD find Class............"+name);
} catch( ClassNotFoundException cnfe )
{
try
{
String rname = name;
rname = rname.replace ('.', '/') + ".class";//重要,必须还原为目录格式
System.out.println("myClassLoaderByURL Msg: Option jar Lib:"+_url.toExternalForm());
System.out.println("myClassLoaderByURL Msg: find class name:"+rname);
URLClassLoader ucld = new URLClassLoader(new URL[]{_url},myClassLoaderByURL.class.getClassLoader());
InputStream is = ucld.getResourceAsStream(rname);
if(is==null)
{
throw new ClassNotFoundException(" Can't Find Specified Class:"+name);
}
int size=is.available();
byte[] b = new byte[size];
is.read(b,0,size);
is.close();
speClass = defineClass(name,b,0,b.length);
}catch(Exception ioe)
{
ioe.printStackTrace();
throw new ClassNotFoundException();
}
}catch(Exception ce)
{
ce.printStackTrace();
throw new ClassNotFoundException();
}
System.out.println("myClassLoaderByURL Msg: ok,load success");
return speClass;
}
public Class loadClass( String pClassName, boolean pResolve ) throws ClassNotFoundException {
System.out.println("myClassLoaderByURL Msg:loadClass(), resolve: " + pResolve );
Class lClass = findLoadedClass( pClassName );
lClass = findClass( pClassName );
//ResolveClass.
try {
if( pResolve ) {
System.out.println("myClassLoaderByURL Msg:resolve class: " + lClass );
resolveClass( lClass );
}
} catch (Error e) {
e.printStackTrace();
throw e;
}
return lClass;
}
public Class loadClass( String pClassName) throws ClassNotFoundException
{
Class t =loadClass(pClassName,true);
return t;
}
private boolean checkJar(String jarfile)
{
System.out.println("myClassLoaderByURL Msg: checkJar:"+jarfile);
File jarf = new File(jarfile);
try
{
System.out.println(jarf.getCanonicalFile());
}catch(Exception ee)
{
}
return jarf.exists();
}
}
编写自己的Boot Wrapper类:
import java.io.*;
import java.util.zip.*;
import java.util.jar.*;
import java.net.URLClassLoader;
import java.net.URL;
import java.lang.reflect.Method;
public class testClassLoaderByURL extends java.lang.Thread
{
static myClassLoaderByURL Mydefault;
static String JarLibraryPath="";
static String executedClass = "";
public static void main(String[] args) throws Exception
{
if(args.length <2)
{
System.out.println("Syntax testClassLoaderByURL /path/xx.jar Executable class name(include main method");
System.out.println("Example: java testClassLoaderByURL c:\\temp\\test.jar org.sun.go");
System.exit(0);
}
JarLibraryPath=args[0];
executedClass = args[1];
//here can verified parameter
System.out.println("Jar is:"+JarLibraryPath+", Class is:"+executedClass);
System.out.println("Begin Load");
Mydefault = new myClassLoaderByURL(JarLibraryPath,testClassLoader.class.getClassLoader());
myClassLoaderByURL.defaultld = Mydefault;
Thread.currentThread().setContextClassLoader(Mydefault);
Class cls = Mydefault.loadClass(executedClass);//重要.
Method main = cls.getMethod("main", new Class[]{String[].class});
main.invoke(cls, new Object[]{args});
}
}
Javascript 变量范围问题.
一段简单的代码引出的问题:
function test1()
{
for (i=0;i<3 br="" i=""> {
print("test1:"+i);
}
}
function test2()
{
for (i=0;i<3 br="" i=""> {
print("test2:"+i);
test1();
}
}
test2();
得到结果,出乎人的意料:3>3>
test2:0
test1:0
test1:1
test1:2
修改函数test1 如下:
function test1()
{
for (var i=0;i<3 br="" i=""> {
print("test1:"+i);
}
}3>
得到结果,符合预期:
test2:0
test1:0
test1:1
test1:2
test2:1
test1:0
test1:1
test1:2
test2:2
test1:0
test1:1
test1:2
这是因为Javascript的变量范围 scope是函数级别的,并没有其他语言级别的local概念。
所以为了避免递归或者嵌套查询问题,最好在变脸名前宣布var,或者使用Ecmascript 1.7
里的let关键词来避免这种情况。
function test1()
{
for (i=0;i<3 br="" i=""> {
print("test1:"+i);
}
}
function test2()
{
for (i=0;i<3 br="" i=""> {
print("test2:"+i);
test1();
}
}
test2();
得到结果,出乎人的意料:3>3>
test2:0
test1:0
test1:1
test1:2
修改函数test1 如下:
function test1()
{
for (var i=0;i<3 br="" i=""> {
print("test1:"+i);
}
}3>
得到结果,符合预期:
test2:0
test1:0
test1:1
test1:2
test2:1
test1:0
test1:1
test1:2
test2:2
test1:0
test1:1
test1:2
这是因为Javascript的变量范围 scope是函数级别的,并没有其他语言级别的local概念。
所以为了避免递归或者嵌套查询问题,最好在变脸名前宣布var,或者使用Ecmascript 1.7
里的let关键词来避免这种情况。
关于可靠性的数序模型
可靠性特征量间的关系
可靠性特征量中可靠度R(t),累积失效率(也叫不可靠度)F(t)、概率密度f(t)和失效率λ(t)是四个基本函数,只要知道其中一个,则所有变量均可求得.基本函数间的关系见下表。| 可靠性特征量 | R(t) | F(t) | f(t) | λ(t) |
| R(t)(可靠度) | - | 1-F(t) | ||
| F(t)(累积失效率) | 1-R(t) | - | ||
| f(t)(概率密度) | - | |||
| λ(t)(失效率) | - |
Android Eclipse Project JNI 指引
最佳指引,在Eclipse里的Android 项目使用JNI依赖的资源,
需要首先安装JDK,Eclipse,cygwin环境或者mingw环境,下载Android SDK,ndk.
http://code.google.com/p/awesomeguy/wiki/JNITutorial#JNI_Sources
JNI目录必须在项目最顶级目录下建立。所有的文件都要放在这里,
包括Android.mk文件,Android.mk文件内容看上述指引内复制后修改为自己实际目录即可。
.c/.cc文件。
头文件,可以借用javah来生成,如图设置Eclipse的位置工具即可。
如此则可以运行该外部工具生成对应的.h头文件。
编写完自己的c/cc文件后需要到终端运行NDK 提供的命令行工具来编译生成库。
项目的根目录及包含jni的该层目录。
运行ndk-build即可完成编译工作。看ndk-build编译图.
ndk-build编译图.
需要首先安装JDK,Eclipse,cygwin环境或者mingw环境,下载Android SDK,ndk.
http://code.google.com/p/awesomeguy/wiki/JNITutorial#JNI_Sources
JNI目录必须在项目最顶级目录下建立。所有的文件都要放在这里,
包括Android.mk文件,Android.mk文件内容看上述指引内复制后修改为自己实际目录即可。
.c/.cc文件。
头文件,可以借用javah来生成,如图设置Eclipse的位置工具即可。
如此则可以运行该外部工具生成对应的.h头文件。
编写完自己的c/cc文件后需要到终端运行NDK 提供的命令行工具来编译生成库。
项目的根目录及包含jni的该层目录。
运行ndk-build即可完成编译工作。看ndk-build编译图.
ndk-build编译图.
星期二, 三月 26, 2013
如何避免 field symbol has not yet been assigned 小技巧tips
Field Symbol类似其他语言中的指针,所有用Assign <fs1> to <fs2>;其实是一个指针,任何对<fs2>的修改,
都反应在<fs1>
所以必须用赋值操作 = 或者move, <fs2>=<fs1>. 或者move <fs1> to <fs2>来进行copy value的操作。
但是这两个语句往往就会出现 field symbol has not yet been assigned.
所以根据<fs2>的类型来做一下申明即可避免这种错误。
Data: ref1 like <fs2>的数据类型,如果是个internal table的 符号,
field-symbols <fs2> like line of so_table.
那么就需要以下声明:
data: lc_dref1 like line of so_table.
ASSIGN lc_dref1 TO <fs2>.
然后再使用 <fs2> = <fs1>. 就无问题了。
可以使用 UNASSIGN <fs2> 来释放。
所以必须用赋值操作 = 或者move, <fs2>=<fs1>. 或者move <fs1> to <fs2>来进行copy value的操作。
但是这两个语句往往就会出现 field symbol has not yet been assigned.
所以根据<fs2>的类型来做一下申明即可避免这种错误。
Data: ref1 like <fs2>的数据类型,如果是个internal table的 符号,
field-symbols <fs2> like line of so_table.
那么就需要以下声明:
data: lc_dref1 like line of so_table.
ASSIGN lc_dref1 TO <fs2>.
然后再使用 <fs2> = <fs1>. 就无问题了。
可以使用 UNASSIGN <fs2> 来释放。
星期二, 三月 19, 2013
星期一, 三月 18, 2013
如何在ant里获取时间字符串,然后用于其他task
比如,我想删除一个目录下匹配通配符的一些文件,然后新建一个包含当前时间文件名的文件,就要如此:
1.得到当前时间格式化字符串 TODAY_UK
<tstamp>
<format property="TODAY_UK" pattern="yyyyMMdd_HHmmsssss" locale="cn,CN"/>
</tstamp>
2.删除符合某个规则所有文件。
<delete verbose="true" failonerror="false">
<fileset dir="." includes="Bonus*.jar"/>
</delete>
3.新建包含时间字符串的文件。
<target name="all">1.得到当前时间格式化字符串 TODAY_UK
<tstamp>
<format property="TODAY_UK" pattern="yyyyMMdd_HHmmsssss" locale="cn,CN"/>
</tstamp>
2.删除符合某个规则所有文件。
<delete verbose="true" failonerror="false">
<fileset dir="." includes="Bonus*.jar"/>
</delete>
3.新建包含时间字符串的文件。
<jar destfile="Bonus${TODAY_UK}.jar" filesetmanifest="skip">
<zipfileset dir="." prefix="bonus" >
<exclude name="sqlite*.*"/>
<include name="*.c"/>
<include name="*.cpp"/>
<include name="*.h"/>
<include name="*.xml"/>
<include name="*.xrc"/>
<include name="*.rc"/>
<include name="*.bat"/>
<include name="*.sql"/>
</zipfileset>
</jar>
</target>星期三, 三月 13, 2013
Google V8 在 Window 7和mingw 环境下编译通过
首先 V8 Javascript 官方不支持mingw环境,所以编译开始就要有心理准备肯定会有一些错误,一般是在link的时候出现;
一般通过修改相关配置文件的命令行选项可以纠正之。
其次,出现 undefined reference to vtable for XXXX的link错误提示,vtable是c++用来处理虚函数编译器算法,可以参看
所以出现这种提示,2种可能,
1.虚函数方法没有实现,只是在.h头部文件中声明而已。
2.实现虚函数的.cc文件没有放到link命令行内。
1.首先下载最新的V8 Javascript源代码(必须首先安装上svn工具)
一般通过修改相关配置文件的命令行选项可以纠正之。
其次,出现 undefined reference to vtable for XXXX的link错误提示,vtable是c++用来处理虚函数编译器算法,可以参看
Virtual method table - Wikipedia, the free encyclopedia。
所以出现这种提示,2种可能,
1.虚函数方法没有实现,只是在.h头部文件中声明而已。
2.实现虚函数的.cc文件没有放到link命令行内。
1.首先下载最新的V8 Javascript源代码(必须首先安装上svn工具)
svn checkout http://v8.googlecode.com/svn/trunk/ v82.进入v8 目录 cd v8,然后准备新的Google v8 编译管理工具 gyp
注意: http://v8.googlecode.com/svn/branches/ 这个目录下是用于Google浏览器的稳定版本,可以下载最大数字的版本编译svn checkout http://v8.googlecode.com/svn/branches/3.16/ v8_316 。
svn co http://gyp.googlecode.com/svn/trunk build/gyp
然后运行:
python build\gyp_v8 --generator-output="out" -Dv8_target_arch=ia32
注意:如果是使用msvc可以告之gyp使用的visual studio express 版本:
python build\gyp_v8 -G msvs_version=2010 --generator-output="out" -Dv8_target_arch=ia32
最后开始编译并声称v8.dll和libv8.a文件
scons.py arch=ia32 os=win32 toolchain=gcc library=shared I_know_I_should_build_with_GYP=yes
如果最后link出现了vtable 错误,就寻找包含的方法在那个.cc文件,编译并手动生成v8.dll和libv8.a
如果最后link出现了vtable 错误,就寻找包含的方法在那个.cc文件,编译并手动生成v8.dll和libv8.a
通过命令行:
g++ -o obj\release\marking-thread.o -c -fno-rtti -fno-exceptions -DWIN32 -Wall -Werror -W -Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -pedantic -Wno-long-long -Wno-pedantic-ms-format -m32 -O3 -fomit-frame-pointer -fdata-sections -ffunction-sections -DWIN32 -DV8_TARGET_ARCH_IA32 -DENABLE_DEBUGGER_SUPPORT -Isrc src\marking-thread.cc
g++ -o obj\release\marking-thread.o -c -fno-rtti -fno-exceptions -DWIN32 -Wall -Werror -W -Wno-unused-parameter -Woverloaded-virtual -Wnon-virtual-dtor -pedantic -Wno-long-long -Wno-pedantic-ms-format -m32 -O3 -fomit-frame-pointer -fdata-sections -ffunction-sections -DWIN32 -DV8_TARGET_ARCH_IA32 -DENABLE_DEBUGGER_SUPPORT -Isrc src\marking-thread.cc
分别生成这.o文件在obj\release下之后,将其加入到最后生成 v8.dll和libv8.a的命令中,即可生成动态库.
V8的shell d8目前只有依赖msvc 生成,要编译生成d8.exe用来调试javascript程序,
还必须要下载 第三方的包,
在v8 或v8_316目录下:
1.svn co http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 third_party/cygwin
2.svn co http://src.chromium.org/svn/trunk/tools/third_party/python_26@89111 third_party/python_26
这两个包用来msvc用来生成snapshot.lib的过程中,必须的。
至此即可用v8 Engine嵌入自己的程序来使用了。
还必须要下载 第三方的包,
在v8 或v8_316目录下:
1.svn co http://src.chromium.org/svn/trunk/deps/third_party/cygwin@66844 third_party/cygwin
2.svn co http://src.chromium.org/svn/trunk/tools/third_party/python_26@89111 third_party/python_26
这两个包用来msvc用来生成snapshot.lib的过程中,必须的。
至此即可用v8 Engine嵌入自己的程序来使用了。
v8 支持Android.
星期六, 三月 09, 2013
v8 Javascript嵌入Javascript代码注意。
C++ 支持多行字符串书写语法multiple line string
const char * jscode=
"ball=['1','2','3','4'];\n"
"result=''\n"
"function test(){ for(i=0;i<ball.length;i++){result=result+ball[i];}return result;}"
" ts= test();"
;
注意如果不加入换行\n,则每行代码结束必须加入分号;,来表示一行代码结束
const char * jscode=
"ball=['1','2','3','4'];\n"
"result=''\n"
"function test(){ for(i=0;i<ball.length;i++){result=result+ball[i];}return result;}"
" ts= test();"
;
注意如果不加入换行\n,则每行代码结束必须加入分号;,来表示一行代码结束
星期五, 三月 08, 2013
Window 7 Mingw 环境编译 Google V8 Javascript 步骤
首先寻找一个稳定的代码版本是最重要的,我一开始按照如下URL里的说明下载代码:
http://code.google.com/p/v8/wiki/Source
svn checkout http://v8.googlecode.com/svn/trunk/ v8
这个代码根据说明是更新频率是按周来的,实际我发现一天之内就可能有多个版本。
所以不得不寻找稳定的版本,最后找到一下地址:
http://v8.googlecode.com/svn/branches/
得到最新的稳定版本到 v8_39目录下
svn checkout http://v8.googlecode.com/svn/branches/3.9/ v8_39
然后进入v8_39目录用以下命令成功编译.
d:\Python26\Scripts\scons.py mode=release os=win32 toolchain=gcc importenv=PATH library=shared snapshot=on I_know_I_should_build_with_GYP=yes
1.
编译的环境,首先需要安装mingw环境,我使用的tdm gcc 4.7.1 的
32位版本,没有使用mingw64版本。http://code.google.com/p/v8/wiki/Source
svn checkout http://v8.googlecode.com/svn/trunk/ v8
这个代码根据说明是更新频率是按周来的,实际我发现一天之内就可能有多个版本。
所以不得不寻找稳定的版本,最后找到一下地址:
http://v8.googlecode.com/svn/branches/
得到最新的稳定版本到 v8_39目录下
svn checkout http://v8.googlecode.com/svn/branches/3.9/ v8_39
然后进入v8_39目录用以下命令成功编译.
d:\Python26\Scripts\scons.py mode=release os=win32 toolchain=gcc importenv=PATH library=shared snapshot=on I_know_I_should_build_with_GYP=yes
1.
编译的环境,首先需要安装mingw环境,我使用的tdm gcc 4.7.1 的
下载: http://tdm-gcc.tdragon.net/download ,32bit.
http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.7.1-2.exe/download
2.安装python,我使用的python for window 2.6版本并且要安装scons 模块.
http://sourceforge.net/projects/tdm-gcc/files/TDM-GCC%20Installer/tdm-gcc-4.7.1-2.exe/download
2.安装python,我使用的python for window 2.6版本并且要安装scons 模块.
scons 下载 :http://www.scons.org/ ,我使用的2.2.0版本。
下载展开到一个目录后,运行 python setup.py 就将scons 安装到了python 安装目录的Scirpts目录下。
下载展开到一个目录后,运行 python setup.py 就将scons 安装到了python 安装目录的Scirpts目录下。
这样安装环境就准备完毕了。
scons在google v8 javascript环境里已经不支持了。但GYP方式目前在mingw下工作不利,所以这也是权宜之计了。
after source code download,use follow command line .
all is ok.
星期二, 三月 05, 2013
It is time say good by mingw.
越来越多open source 开始使用C++了,到此不同平台,不同编译器
之间的互操作越来越困难了,C时代的mingw的得心应手,在Visual C++的复杂,和import library的机制下,需要花费越来越多的精力了。
不同的C++生成DLL之间的使用,终于成为一个不可能的任务了。
终于决定gcc为主,msvc用作window平台工具了。
之间的互操作越来越困难了,C时代的mingw的得心应手,在Visual C++的复杂,和import library的机制下,需要花费越来越多的精力了。
不同的C++生成DLL之间的使用,终于成为一个不可能的任务了。
终于决定gcc为主,msvc用作window平台工具了。
星期一, 二月 25, 2013
delopy web app to Google appengine
download appengine jdk and run follow command:
D:\appengine-java-sdk-1.7.5\bin\appcfg.cmd update war -A szpureweb
D:\appengine-java-sdk-1.7.5\bin\appcfg.cmd update war -A szpureweb
星期日, 一月 27, 2013
如何在Eclipse 中实现Build number的功能
思路:利用Ant builder
如图
1.首先输入当前Project的ant build.xml文件,和一个保存编译计数器的properties文件。
加入新的target用name 来指定:
2.给项目加入Ant Builder ,项目属性里寻找Builder 然后加入Ant Builder,然后将其用
up按钮移动到最顶部,让其第一个被调用.
3.要加入refresh的功能和默认的target,这个参考如上和如下两个图就知道了.
如图
1.首先输入当前Project的ant build.xml文件,和一个保存编译计数器的properties文件。
加入新的target用name 来指定:
2.给项目加入Ant Builder ,项目属性里寻找Builder 然后加入Ant Builder,然后将其用
up按钮移动到最顶部,让其第一个被调用.
3.要加入refresh的功能和默认的target,这个参考如上和如下两个图就知道了.
星期二, 一月 22, 2013
星期三, 一月 16, 2013
abap 执行本地SQL Native SQL
exec sql.
insert into test(code) valeus(
:pl_wa-Entity_Code,
);
endexec.
if sy-subrc ne 0.
write:/,'fail!'.
endif.
commit work.
insert into test(code) valeus(
:pl_wa-Entity_Code,
);
endexec.
if sy-subrc ne 0.
write:/,'fail!'.
endif.
commit work.
订阅:
博文 (Atom)













