igraph-help
[Top][All Lists]
Advanced

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

Re: [igraph] installing igraph 0.7.0 python version into Canopy on OSX -


From: Nick Eubank
Subject: Re: [igraph] installing igraph 0.7.0 python version into Canopy on OSX - _igraph.so
Date: Thu, 05 Feb 2015 17:58:28 +0000

I hesitate to add in here as this is all way above my paygrade, but I too ran into issues with a canopy installation throwing the Cannot find the C core of igraph on this system using pkg-config. When it happened to me, I think I just moved the igraph.pc file to /usr/local/lib/pkgconfig (I THINK it was in /usr/local/lib) and so pkg-config could find it and it worked.



On Thu Feb 05 2015 at 8:36:23 AM Tamas Nepusz <address@hidden> wrote:
Hi,

I think I have an idea but I'm not 100% sure. It seems that igraph is compiled
with thread-local storage support by default (meaning that global variables are
declared as thread-local, so in theory it should be safe to use igraph from
multiple threads at the same time -- although it's highly experimental and not
tested thoroughly at all, so we do not officially support this). This seems to
be an error in the configure script because that was definitely not our
intention at all. I will have to follow up on this later.

Now, this means that when you install the C core, you get a copy of the igraph
library somewhere in your library path where thread-local variables are
enabled. On OS X, thread-local storage is actually emulated, and the
___emutls_get_address function is needed for this.

The problem is then that later on you compile the Python interface, and the
setup script of the Python interface is not able to find the installed C core
(as you mentioned this), so it *downloads* the C core again and compiles it --
but this time the installer explicitly passes the --disable-tls argument to the
configure script. Then you end up with a Python interface which is expected to
link to a C core *without* thread-local support, while the actual igraph
library that you have on your system is compiled *with* thread-local support.

I see three possible solutions if this is really the case:

1) Get rid of the existing C core installation of igraph. If you installed it
   in /usr/local (which is what igraph does by default), you can simply remove
   /usr/local/lib/libigraph* and /usr/local/include/igraph*

2) Try to make the setup.py script of the Python interface find where the
   C core was installed instead of downloading it again. By default the setup
   script uses pkg-config to figure out where the C core is, so first try
   typing "pkg-config --cflags --libs igraph" into a terminal and check whether
   it is working. (It should print a bunch of compiler flags).

3) Recompile the C core with "./configure --disable-tls && make && make
   install", then recompile the Python interface as well (just to be on the
   safe side).

Let me know if it didn't work so we can continue investigating.

All the best,
Tamas

_______________________________________________
igraph-help mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/igraph-help

reply via email to

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