[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [igraph] Igraph with JNI
From: |
Gang Su |
Subject: |
Re: [igraph] Igraph with JNI |
Date: |
Tue, 28 Jul 2009 16:15:05 -0400 |
User-agent: |
Internet Messaging Program (IMP) H3 (4.2) |
And Tamas,
There's an igraph.dll in the R package, i tried to build the tutorial
program using visual studio express commandline compiler cl, and it
doesn't work. I got LINK1107 Error. After some research I found that
under windows, when a dll file is built, a lib file is also presented.
So when compiling, the link should link to igraph.lib instead of
igraph.dll.
I do want to spend sometime on this. Even just port a few functions to
java, this will at least provide some samples and tutorials for other
people to begin with.
Thank you very much!
Gang
Quoting Tamas Nepusz <address@hidden>:
Hi Gang,
I am thinking about trying to bridge igraph with JAVA via JNI on
windows. The way how JNI works is to link Java via JNI to native C
functions. The C source is complied to a shared library DLL file.
Does anyone have worked on this before?
Yes, I tried it once, but only as a proof-of-concept, so I pretty
much abandoned the project after I convinced myself that igraph
could be used from Java using JNI had someone took the effort to
develop a proper interface. So yes, it's pretty much doable, but not
straightforward at all. The reason is twofold: first, using JNI
means that you have to write a lot of "glue code" between igraph and
Java (pretty much all igraph data types must have a Java counterpart
and you have to write the conversion code in C); second, there are
some calling conventions in igraph that cannot be easily reproduced
in Java (i.e., functions using additional arguments to _return_
results). I started adapting the interface generator we use to build
the R interface to be able to generate C glue code for the Java
interface, but it's very far from being finished.
where the The directory after the -I switch is the one containing
the igraph.h file, while the one following -L should contain the
library file itself, usually a file called libigraph.so,
libigraph.a or igraph.dll
"Quote"
Where actually I can find this igraph.dll in the igraph R package.
I don't know for sure (that's Gábor's part), but I guess nowhere.
The thing is that there are two ways to include igraph in your
project: static linking (in which case you don't need the igraph DLL
as everything that's in the DLL is built directly into your
application) or dynamic linking (where you need the DLL as your app
contains only references to igraph calls). I think the R interface
is built statically, so you won't find a DLL there. JNI only
supports dynamic linking, so you need the DLL. To build the DLL, you
have to build the library from the C source code either in Visual
Studio or in MSYS.
So my question is if I compile a c file using igraph librarys, and
it can be compiled successfully, will it be able to run standalone?
If you link it statically, it will work. If you link it dynamically,
it will require the DLL. See the corresponding Wikipedia entries as
a starting point:
http://en.wikipedia.org/wiki/Static_linking
http://en.wikipedia.org/wiki/Dynamic_linking#Dynamic_linking
--
Tamas
Gang Su
PhD student
Bioinformatics training track
Program in Biomedical Sciences
University of Michigan, Ann Arbor
MI, 48105, U.S.A.
Re: [igraph] Igraph with JNI,
Gang Su <=
Re: [igraph] Igraph with JNI, Jose Quesada, 2009/07/28
Re: [igraph] Igraph with JNI, Gábor Csárdi, 2009/07/28