[1148] in java-interest

home help back first fref pref prev next nref lref last post

example of calling native c++

daemon@ATHENA.MIT.EDU (Jeff White)
Fri Aug 25 02:57:53 1995

From: Jeff White <jsw@cs.brown.edu>
Date: Mon, 21 Aug 1995 22:07:39 -0400
To: java-interest@java.sun.com
Reply-To: jsw@cs.brown.edu


Some people have requested help in calling native c++ code.  Here are
the neccessary files to do this - Demo.java, Hello.java, and Hello.C,
and a Makefile.  The key is putting the c++ declaration inside an
extern "C" statement and linking in the C++ lib file - libC.so.5 on my
machine.  Also, don't forget to set LD_LIBRARY_PATH to the directory
of the .so.  Let me know if you need anymore help.

jeff

-- Demo.java
package demo;

public
class Demo {
    public Demo() {
	Hello i;
	i = new Hello();
	i.printhello();
    }

    public static void main(String argv[]) {
	Demo d = new Demo();
    }
}
--

-- Hello.java
package demo;
import java.util.Linker;

public class Hello {

    static {  Linker.loadLibrary("hello");    }
    public Hello(){}
    public native void printhello();
}
--

-- Hello.C
extern "C" {
void demo_Hello_printhello(struct Hdemo_Hello *blah);
#include "javaString.h"
#include "demo_Hello.h"
}
#include <iostream.h>

void demo_Hello_printhello(struct Hdemo_Hello *blah) {
  cout << "hello c++" << endl;
}
---

-- Makefile
BASEDIR=.
HOTJAVA_HOME=/pro/java/java

INCLUDES=-I$(HOTJAVA_HOME)/include -I$(HOTJAVA_HOME)/include/solaris -I.
CFLAGS=$(INCLUDES)

JAVAC=$(HOTJAVA_HOME)/bin/javac
JAVAH=$(HOTJAVA_HOME)/bin/javah
JAVA=$(HOTJAVA_HOME)/bin/java
LD=/usr/ccs/bin/ld

CC=/opt/SUNWspro3.01/bin/cc
CPP=/opt/SUNWspro3.01/bin/CC

all: libhello.so Demo.class

libhello.so: Hello.o demo_Hello.o 
	$(LD) -L/opt/SUNWspro/SC3.0.1/lib -lC -G -o $@ Hello.o demo_Hello.o /usr/lib/libC.so.5

Demo.class: Demo.java
	$(JAVAC) -d . Demo.java
	$(JAVA) demo.Demo 

demo/Hello.class: Hello.java 
	$(JAVAC) -d . Hello.java

demo_Hello.c: demo/Hello.class
	$(JAVAH) -stubs demo.Hello

demo_Hello.h: demo/Hello.class
	$(JAVAH) demo.Hello

demo_Hello.o: demo_Hello.c demo_Hello.h
	$(CC) -c $(CFLAGS) demo_Hello.c

Hello.o: Hello.C demo_Hello.h 
	$(CPP) -c $(CFLAGS) Hello.C

clean:
	rm -f *.o demo/*.class *.so demo_Hello.c demo_Hello.h 
----

 --------------------------------------------------------------------
| Jeff White jsw@cs.brown.edu http://www.cs.brown.edu/people/jsw/    |
| "So you run and you run to catch up with the sun but it's sinking  |
| Racing around to come up behind you again" - pink floyd            |
 --------------------------------------------------------------------
-
Note to Sun employees: this is an EXTERNAL mailing list!
Info: send 'help' to java-interest-request@java.sun.com

home help back first fref pref prev next nref lref last post