igraph-help
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]