Jython和JyNI的研究
来源:互联网 发布:ubuntu安装jdk 编辑:程序博客网 时间:2024/06/03 17:39
Linux Mint Debian Edition13(64)
Environment
Sunjdk1.7
Python2.7.3
Jython2.7b1
JyNI.alpha.2
编译JyNI.alpha.2是出错(系统库不兼容)
In file included from /usr/include/string.h:159:0,
from ./JyNI-C/include/Python_JyNI/Python_JyNI.h:94,
from ./JyNI-C/include/JyNI.h:58,
from JyNI-C/src/abstract.c:49:
/usr/include/xlocale.h:39:4: error: declaration for parameter ‘__locale_t’ but no such parameter
In file included from ./JyNI-C/include/Python_JyNI/Python_JyNI.h:94:0,
from ./JyNI-C/include/JyNI.h:58,
from JyNI-C/src/abstract.c:49:
/usr/include/string.h:150:15: error: declaration for parameter ‘strxfrm’ but no such parameter
/usr/include/string.h:147:12: error: declaration for parameter ‘strcoll’ but no such parameter
/usr/include/string.h:143:12: error: declaration for parameter ‘strncmp’ but no such parameter
/usr/include/string.h:140:12: error: declaration for parameter ‘strcmp’ but no such parameter
/usr/include/string.h:136:14: error: declaration for parameter ‘strncat’ but no such parameter
/usr/include/string.h:133:14: error: declaration for parameter ‘strcat’ but no such parameter
/usr/include/string.h:128:14: error: declaration for parameter ‘strncpy’ but no such parameter
/usr/include/string.h:125:14: error: declaration for parameter ‘strcpy’ but no such parameter
/usr/include/string.h:92:14: error: declaration for parameter ‘memchr’ but no such parameter
/usr/include/string.h:65:12: error: declaration for parameter ‘memcmp’ but no such parameter
/usr/include/string.h:62:14: error: declaration for parameter ‘memset’ but no such parameter
/usr/include/string.h:54:14: error: declaration for parameter ‘memccpy’ but no such parameter
/usr/include/string.h:46:14: error: declaration for parameter ‘memmove’ but no such parameter
/usr/include/string.h:42:14: error: declaration for parameter ‘memcpy’ but no such parameter
JyNI-C/src/abstract.c:2801:1: error: expected ‘{’ at end of input
make: *** [JyNI-C/src/abstract.o] Error 1
使用官方提供的jyni-loader.so jyni.so jyni.jar 不起作用
Ubuntu13.10(64bit)
OpenJdk1.7
Python2.7.3 (python dev source)
Jython2.7b1
JyNI.alpha.2
编译可以成功 jyNIsrc/build生成jyni-load.so jyni.so jyni.jar, DemoExtension.so
Jython+jyNI调用DemoExtension
java -cp jython.jar:build/JyNI.jar org.python.util.jython JyNI-Demo/src/JyNIDemo.py
和Cpython输出一样(其他两个alpha2可以通过,alpha1不能通过)(输出和Powerlinux环境Cpython一样,不再展示)
在java 应用程序也可调用
调用代码若下
/home/modules:scripts为(/root/workspace/JavaCallPython/natvielib)
目录内有编译好的(DemoExtension.so)(这是cpython实验扩展部分) (libJyNI-Loader.so libJyNI.so)(这是jyni的c部分)
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;
public class SecondJavaScript
{
public static void main(String args[])
{
PythonInterpreter interpreter = new PythonInterpreter();
Properties props = new Properties();
props.setProperty("python.path", "/home/modules:scripts");
PythonInterpreter.initialize(System.getProperties(), props,
new String[] {""});
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
interpreter.setOut(outputStream);
interpreter.setErr(errorStream);
PySystemState sys = interpreter.getSystemState();
// interpreter.exec("import sys;sys.path.append('C:/jython2.7b1/Lib/site-packages')");
// interpreter.exec("import sys;sys.path.append('C:/jython2.7b1/Lib')");
// interpreter.
//interpreter.execfile("D:\\Documents\\Downloads\\PySite1.py");
interpreter.execfile("/home/root1/JyNI/JyNIDemo/src/JyNIDemo.py");
try {
String out = outputStream.toString("gbk");
String error = errorStream.toString("gbk");
System.out.println(out);
System.out.println("===========");
System.out.println(error);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//main
} //
PowerLinux(RedHat)
Ibmjava7
Python2.7.3
Jython2.7b1
JyNI.alpha2
编译可通过,(但执行有问题 1.java –cp ibm的java不支持classpath 加入*.so)(个人的推测),
导致不能有jython 解析器执行
2. java emeded call JynI 可以执行但JyNIDateTime(有多余的网址信息) 对用JyNIDeo也有一些程序异常,如调用标准的JyNIDemo.py 如下信息
Jython+JyNI
--------Access Docstring----------
This is a pure demo extension.
--------Hello World----------
<built-in function hello_world>
Hello World method.
--------Argument passing----------
Concatenates first with last element. Returns empty string, if less than two args are available.
begin_end
Returns number of arguments as string.
(6)
--------Argument passing with keywords----------
(in JyNI-case see bottom for native outputs)
----------------Integer passing-----------------
Returns the square of the given int.
<built-in function intSquare>
<type 'builtin_function_or_method'>
intSquare
Native square result of 16: 256
Native square result of -19: 361
--------Native list access reading----------
<type 'list'>
(in JyNI-case see bottom for native outputs)
--------Native list access writing----------
input: ['Hello', 'lovely', 'world']
output: ['Hello', 'lovely', 'natively modified']
--------Set testing----------
set(['orange', 'banana', 'pear', 'apple'])
after popping 2 elements:
set(['pear', 'apple'])
==================================================
On some consoles, Java displays native output from
JNI extensions after the last non-native output.
This usually also affects JyNI output. So expect
native output after these lines on such consoles.
==================================================
===========
(CPythoom错误流里没有下面的异常信息)
Unhandled exception
Type=Segmentation error vmState=0x00000000
J9Generic_Signal_Number=00000004 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001
Handler1=00000FFFA86CD820 Handler2=00000FFFA8557DD8
R0=FFFFFFFFFFFFFFE8 R1=00000FFFA913DBA0 R2=00000FFF9A900208 R3=FFFFFFFFFFFFFFE8
R4=00000FFF9A8D50C8 R5=000000000000000B R6=FEFEFEFEFEFEFEFF R7=000000000000000A
R8=000000000000000B R9=FFFFFFFFFFFFFFE8 R10=0000000000000001 R11=00000FFF9A856DF0
R12=0000000022004444 R13=00000FFFA9146910 R14=00000FFFA91B81D8 R15=00000FFFA91B8680
R16=00000FFFA8740000 R17=0000000000000004 R18=0000000000000007 R19=00000FFFC1912500
R20=00000FFFC19125E0 R21=00000FFFA91CFB68 R22=00000100227300B0 R23=0000000000000000
R24=00000FFFA86C8C28 R25=00000FFFA873A8C0 R26=00000FFFA869D120 R27=00000FFFA86C8C28
R28=0000000000000000 R29=00000000001CCA00 R30=00000FFFA86D4020 R31=00000FFFA913DBA0
NIP=00000FFF9A856E10 MSR=800000000200F032 ORIG_GPR3=00000FFF9B130000 CTR=00000FFF9A856DF0
LINK=00000FFF9A89920C XER=0000000000000000 CCR=0000000022004442 SOFTE=0000000000000001
TRAP=0000000000000300 DAR=FFFFFFFFFFFFFFF8 dsisr=0000000040000000 RESULT=0000000000000000
FPR0 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR1 4028000000000000 (f: 0.000000, d: 1.200000e+01)
FPR2 41d0000000000000 (f: 0.000000, d: 1.073742e+09)
FPR3 3fee666660000000 (f: 1610612736.000000, d: 9.500000e-01)
FPR4 3fa9999a00000000 (f: 0.000000, d: 5.000001e-02)
FPR5 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR6 4130000000000000 (f: 0.000000, d: 1.048576e+06)
FPR7 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR8 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307)
FPR9 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307)
FPR10 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307)
FPR11 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307)
FPR12 3fe8000000000000 (f: 0.000000, d: 7.500000e-01)
FPR13 4028000000000000 (f: 0.000000, d: 1.200000e+01)
FPR14 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR15 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR16 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR17 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR18 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR19 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR20 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR21 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR22 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR23 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR24 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR25 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR26 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR27 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR28 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR29 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR30 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR31 0000000000000000 (f: 0.000000, d: 0.000000e+00)
Module=/root/workspace/JavaCallPython/natvielib/libJyNI.so
Module_base_address=00000FFF9A7C0000 Symbol=JyNI_CleanUp_JyObject
Symbol_address=00000FFF9A8F5290
Target=2_60_20130422_146026 (Linux 2.6.32-358.el6.ppc64)
CPU=ppc64 (12 logical CPUs) (0x3cf00000 RAM)
----------- Stack Backtrace -----------
(0x00000FFFA84FA2B8 [libj9prt26.so+0x2a2b8])
(0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc])
(0x00000FFFA84FA398 [libj9prt26.so+0x2a398])
(0x00000FFFA84FA568 [libj9prt26.so+0x2a568])
(0x00000FFFA84F9F40 [libj9prt26.so+0x29f40])
(0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc])
(0x00000FFFA84FA008 [libj9prt26.so+0x2a008])
(0x00000FFFA860A070 [libj9vm26.so+0x4a070])
(0x00000FFFA8609648 [libj9vm26.so+0x49648])
(0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc])
(0x00000FFFA8609068 [libj9vm26.so+0x49068])
(0x00000FFFA850F680 [libj9prt26.so+0x3f680])
__kernel_sigtramp_rt64+0x0 (0x00000FFFA9200418)
(0x0000000000000007 [<unknown>+0x0])
PyString_Fini+0xfffa247c (0x00000FFF9A89920C [libJyNI.so+0xd920c])
JyNI_unload+0xfff6d05c (0x00000FFF9A86238C [libJyNI.so+0xa238c])
JNI_OnUnload+0xfffeecc4 (0x00000FFF9B0E17D4 [libJyNI-Loader.so+0x17d4])
(0x00000FFFA866C88C [libj9vm26.so+0xac88c])
(0x00000FFFA85F8E14 [libj9vm26.so+0x38e14])
(0x00000FFFA8642864 [libj9vm26.so+0x82864])
(0x00000FFFA8626F3C [libj9vm26.so+0x66f3c])
(0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc])
(0x00000FFFA8627820 [libj9vm26.so+0x67820])
(0x00000FFFA86F4570 [libjvm.so+0x14570])
(0x00000FFFA91A8734 [libjli.so+0x8734])
(0x00000080987CC21C [libpthread.so.0+0xc21c])
clone+0xfff52e6c (0x00000080986CA57C [libc.so.6+0x12a57c])
---------------------------------------
JVMDUMP039I
Hello World!
kewordTest called:
first
second
Hey
a:
Hello
b:
lovely
c:
world
pop 2 elements from the set...
orange
banana
JNI_OnUnload
JyNI_unload
JVMDUMP013I \u5df2\u5904\u7406\u8f6c\u50a8\u4e8b\u4ef6\u201cgpf\u201d\uff0c\u8be6\u7ec6\u4fe1\u606f\uff1a\u201c\u201d\u3002
3.调用JyNIDatetimeTest
Jython+jyNI
datetime successfully imported.
-----datetime doc-----
Concrete date/time and related types -- prototype implemented in Python.
See http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage
See also http://dir.yahoo.com/Reference/calendars/
For a primer on DST, including many current DST rules, see
http://webexhibits.org/daylightsaving/
For more about DST than you ever wanted to know, see
ftp://elsie.nci.nih.gov/pub/
Sources for time zone and DST data: http://www.twinsun.com/tz/tz-link.htm
This was originally copied from the sandbox of the CPython CVS repository.
Thanks to Tim Peters for suggesting using it.
----------------------
datetime
2003-08-04 12:30:45
datetime.datetime(2003, 8, 4, 12, 30, 45)
<class 'datetime.datetime'>
--------------------------------------
===========
Cpython
-----datetime doc-----
Fast implementation of the datetime type.
----------------------
datetime
2003-08-04 12:30:45
datetime.datetime(2003, 8, 4, 12, 30, 45)
<type 'datetime.datetime'>
--------------------------------------
4, 测试JyNIExceptionTest.py
Jython+JyNI调用
Exception in thread "main" Traceback (most recent call last):
File "/root/test/JyNI-2.7-alpha.2/JyNI-Demo/src/JyNIExceptionTest.py", line 39, in <module>
DemoExtension.exceptionTest()
SystemError: This is a test exception message for JyNI.
Unhandled exception
Type=Segmentation error vmState=0x00000000
J9Generic_Signal_Number=00000004 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001
Handler1=00000FFF8A2AD820 Handler2=00000FFF8A137DD8
R0=FFFFFFFFFFFFFFE8 R1=00000FFF8AD1DBA0 R2=00000FFF7C4D0208 R3=FFFFFFFFFFFFFFE8
R4=00000FFF7C4A50C8 R5=000000000000000B R6=FEFEFEFEFEFEFEFF R7=000000000000000A
R8=000000000000000B R9=FFFFFFFFFFFFFFE8 R10=0000000000000001 R11=00000FFF7C426FF4
R12=0000000022004444 R13=00000FFF8AD26910 R14=00000FFF8AD981D8 R15=00000FFF8AD98680
R16=00000FFF8A320000 R17=0000000000000004 R18=0000000000000007 R19=00000FFFE7FBE700
R20=00000FFFE7FBE7E0 R21=00000FFF8ADAFB68 R22=00000100075300B0 R23=0000000000000000
R24=00000FFF8A2A8C28 R25=00000FFF8A31A8C0 R26=00000FFF8A27D120 R27=00000FFF8A2A8C28
R28=0000000000000000 R29=00000000001CCA00 R30=00000FFF8A2B4020 R31=00000FFF8AD1DBA0
NIP=00000FFF7C426E10 MSR=800000000200F032 ORIG_GPR3=0000000000000000 CTR=00000FFF7C426DF0
LINK=00000FFF7C46920C XER=0000000020000000 CCR=0000000022004442 SOFTE=0000000000000001
TRAP=0000000000000300 DAR=FFFFFFFFFFFFFFF8 dsisr=0000000040000000 RESULT=0000000000000000
FPR0 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR1 0000004700000047 (f: 71.000000, d: 1.506617e-312)
FPR2 4051d00000000000 (f: 0.000000, d: 7.125000e+01)
FPR3 3fe8000000000000 (f: 0.000000, d: 7.500000e-01)
FPR4 3fa9999a00000000 (f: 0.000000, d: 5.000001e-02)
FPR5 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR6 4130000000000000 (f: 0.000000, d: 1.048576e+06)
FPR7 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR8 0065006200610063 (f: 6357091.000000, d: 9.345976e-307)
FPR9 006b00200028006d (f: 2621549.000000, d: 1.201562e-306)
FPR10 006f007300740020 (f: 7602208.000000, d: 1.379624e-306)
FPR11 0072006500630065 (f: 6488165.000000, d: 1.602190e-306)
FPR12 3fe8000000000000 (f: 0.000000, d: 7.500000e-01)
FPR13 4020800000000000 (f: 0.000000, d: 8.250000e+00)
FPR14 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR15 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR16 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR17 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR18 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR19 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR20 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR21 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR22 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR23 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR24 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR25 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR26 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR27 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR28 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR29 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR30 0000000000000000 (f: 0.000000, d: 0.000000e+00)
FPR31 0000000000000000 (f: 0.000000, d: 0.000000e+00)
Module=/root/workspace/JavaCallPython/natvielib/libJyNI.so
Module_base_address=00000FFF7C390000 Symbol=JyNI_CleanUp_JyObject
Symbol_address=00000FFF7C4C5290
Target=2_60_20130422_146026 (Linux 2.6.32-358.el6.ppc64)
CPU=ppc64 (12 logical CPUs) (0x3cf00000 RAM)
----------- Stack Backtrace -----------
(0x00000FFF8A0DA2B8 [libj9prt26.so+0x2a2b8])
(0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc])
(0x00000FFF8A0DA398 [libj9prt26.so+0x2a398])
(0x00000FFF8A0DA568 [libj9prt26.so+0x2a568])
(0x00000FFF8A0D9F40 [libj9prt26.so+0x29f40])
(0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc])
(0x00000FFF8A0DA008 [libj9prt26.so+0x2a008])
(0x00000FFF8A1EA070 [libj9vm26.so+0x4a070])
(0x00000FFF8A1E9648 [libj9vm26.so+0x49648])
(0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc])
(0x00000FFF8A1E9068 [libj9vm26.so+0x49068])
(0x00000FFF8A0EF680 [libj9prt26.so+0x3f680])
__kernel_sigtramp_rt64+0x0 (0x00000FFF8ADE0418)
(0x00000FFF8AD1DC30 [<unknown>+0x0])
PyString_Fini+0xfffa247c (0x00000FFF7C46920C [libJyNI.so+0xd920c])
JyNI_unload+0xfff6d05c (0x00000FFF7C43238C [libJyNI.so+0xa238c])
JNI_OnUnload+0xfffeecc4 (0x00000FFF7CCB17D4 [libJyNI-Loader.so+0x17d4])
(0x00000FFF8A24C88C [libj9vm26.so+0xac88c])
(0x00000FFF8A1D8E14 [libj9vm26.so+0x38e14])
(0x00000FFF8A222864 [libj9vm26.so+0x82864])
(0x00000FFF8A206F3C [libj9vm26.so+0x66f3c])
(0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc])
(0x00000FFF8A207820 [libj9vm26.so+0x67820])
(0x00000FFF8A2D4570 [libjvm.so+0x14570])
(0x00000FFF8AD88734 [libjli.so+0x8734])
(0x00000080987CC21C [libpthread.so.0+0xc21c])
clone+0xfff52e6c (0x00000080986CA57C [libc.so.6+0x12a57c])
---------------------------------------
JVMDUMP039I
JVMDUMP013I \u5df2\u5904\u7406\u8f6c\u50a8\u4e8b\u4ef6\u201cgpf\u201d\uff0c\u8be6\u7ec6\u4fe1\u606f\uff1a\u201c\u201d\u3002
JNI_OnUnload
JyNI_unload
Cpython调用
python JyNIExceptionTest.py
sys.exc_info, initial: (None, None, None)
We call a native method that creates an exception. However, this time we handle it...
...and entered except-area!
sys.exc_info: (<type 'exceptions.SystemError'>, SystemError('This is a test exception message for JyNI.',), <traceback object at 0xfff98af74d0>)
Now lets look, what happens, if the exception is uncaught:
Traceback (most recent call last):
File "JyNIExceptionTest.py", line 39, in <module>
DemoExtension.exceptionTest()
SystemError: This is a test exception message for JyNI.
关于jyNI的编译的说明
1. 需要下载python-dev2.7
2. 需要下载jyNIalpha2
3. 需要安装jdk
4. 需要安装gcc
5. 需要根据情况修改makefile
#
# makefile for JyNI
#
# Author: Jonathan Hale, Stefan Richthofer
#
CC = gcc
JC = javac
OUTPUTDIR = ./build
# Adjust the following line to point to Jython 2.7
JYTHON = ./jython.jar
#for instance, if you extracted it to your home folder:
#JYTHON = /home/your_name/jython.jar(jython和cPython为2.7.x)
# Adjust the two paths below to match your system, if not yet appropriate
PY_INCLUDE = /usr/local/include/python2.7(python源码头文件)
JAVA_HOME = /opt/ibm/java-ppc64-70
#The symlink "default-java" does not exist on every system. If gnumake tells you that the header
#jni.h is missing, please adjust JAVA_HOME appropriately. Example for Java 7, 64 bit:
#JAVA_HOME = /usr/lib/jvm/java-7-openjdk-amd64
JYNI = ./JyNI-Java/src
JYNIBIN = ./JyNI-Java/bin
INCLUDES = -I./JyNI-C/include -I./JyNI-C/include/Python_JyNI -I./JyNI-Java/include -I$(JAVA_HOME)/include -I$(PY_INCLUDE)
CFLAGS = -fPIC -Wl,--add-stdcall-alias -c $(INCLUDES)
LDFLAGS = -shared
JFLAGS= -cp $(JYTHON):$(JYNI) -d $(JYNIBIN)
SOURCES = $(wildcard JyNI-C/src/*.c)
OBJECTS = $(SOURCES:.c=.o)
JSOURCES = $(wildcard JyNI-Java/src/JyNI/*.java)
all: $(OUTPUTDIR) libJyNI libJyNI-Loader JyNI
@echo ''
@echo 'Build finnished.'
$(OUTPUTDIR):
mkdir $(OUTPUTDIR)
.o:
$(CC) $(CFLAGS) $< -o $@
libJyNI: $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $(OUTPUTDIR)/libJyNI.so
libJyNI-Loader: ./JyNI-Loader/JyNILoader.o
$(CC) $(LDFLAGS) ./JyNI-Loader/JyNILoader.o -o $(OUTPUTDIR)/libJyNI-Loader.so
$(JYNIBIN)/JyNI:
$(JC) $(JFLAGS) $(JSOURCES)
$(JYTHON):
@echo ''
@echo '----------------------------------------------'
@echo 'Fatal error: Could not find jython.jar.'
@echo 'Either put jython.jar into the JyNI base folder, or adjust the JYTHON-variable at the top of makefile to point to your installed jython.jar.'
@echo 'Be sure to use Jython 2.7 (beta) or newer.'
@echo '----------------------------------------------'
@echo ''
@false
JyNI: $(JYTHON) $(JYNIBIN)/JyNI
jar cvf $(OUTPUTDIR)/JyNI.jar -C $(JYNIBIN) .
clean:
rm -rf $(JYNIBIN)/JyNI
rm -f ./JyNI-C/src/*.o
rm -f ./JyNI-Loader/JyNILoader.o
.PHONY: JyNI libJyNI libJyNI-Loader clean all
- Jython和JyNI的研究
- Jython:Java和Python代码的粘合剂
- Jython连接Java和Python的桥梁
- Jython:Java和Python代码的粘合剂
- Jython、JRuby 和 Groovy
- jython安装和使用
- jython安装和使用
- Jython 和 Python 对比
- jython安装和使用
- jython安装和使用
- JDK和Jython安装
- 可爱的Jython
- Jython
- Jython
- jython
- Jython
- jython
- Jython和Java相互调用
- Spring声明式事务管理与配置详解
- 成都传智播客yy公开课周末开播啦!!!
- 初步学习《Hadoop权威指南》的一点点心得
- WINCE下的USB驱动开发
- LearnVSXNow! #10 创建我们第一个工具集-重用代码
- Jython和JyNI的研究
- Andriod基础2
- Android基础3
- JS和Jquery获取和修改label的值
- Android基础4(内容提供者ContentProvider)
- Android多线程下载
- android获取手机位置服务
- 号码归属地的查询
- 重拾MFC小细节之动态更新对话框背景图片