igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] Igraph with JNI


From: Gábor Csárdi
Subject: Re: [igraph] Igraph with JNI
Date: Tue, 28 Jul 2009 22:26:53 +0200

On Tue, Jul 28, 2009 at 10:15 PM, Gang Su<address@hidden> wrote:
> And Tamas,
>
> There's an igraph.dll in the R package,

Believe me, this dll is _useless_ for you.

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

Download the zip file I mentioned in the previous email, build igraph,
and then try to build the small example program that is included in
the zip file.

Gabor

> 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.
>
>
> _______________________________________________
> igraph-help mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/igraph-help
>



-- 
Gabor Csardi <address@hidden>     UNIL DGM




reply via email to

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