星期二, 三月 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>  来释放。

 


星期二, 三月 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">
            <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++用来处理虚函数编译器算法,可以参看

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/ v8
注意:
http://v8.googlecode.com/svn/branches/ 这个目录下是用于Google浏览器的稳定版本,可以下载最大数字的版本编译svn checkout http://v8.googlecode.com/svn/branches/3.16/ v8_316
2.进入v8 目录 cd v8,然后准备新的Google v8 编译管理工具 gyp
 
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

目前这个版本会有3个文件在mingw下编译有3个文件被遗漏了
1.code-stubs-hydrogen.cc
2.sweeper-thread.cc
3.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 支持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,则每行代码结束必须加入分号;,来表示一行代码结束

星期五, 三月 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://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 模块.
  scons 下载 :http://www.scons.org/ ,我使用的2.2.0版本。
 下载展开到一个目录后,运行 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平台工具了。