envy_intelligence
envy_intelligence

Reputation: 463

boost python library linking issue -- undefined symbol

I am using boost-python built for python3 to expose a simple hello-world program. The example can be found here : https://github.com/TNG/boost-python-examples/blob/master/01-HelloWorld/hello.cpp

I ran the following commands to get the shared object:

g++ -fPIC -c -I/usr/include/python3.4m -I/usr/include/python3.4m  -Wno-unused-result -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -L/usr/lib/x86_64-linux-gnu/libboost_python-py34 hello.cpp

g++ -shared hello.o -o hello.so

After this, I run the python3 -c 'import hello' command and I get the following error: Traceback (most recent call last):

File "", line 1, in ImportError: hello.so: undefined symbol: _ZTIN5boost6python7objects21py_function_impl_baseE

I partly understand this issue may be because my boost-python installation may be built for an alternative python version (for instance python2.7). When I run the command:

ls /usr/lib/x86_64-linux-gnu/libboost_python*.so

There are three .so files:

1. libboost_python-py27.so
2. libboost_python-py34.so
3. libboost_python.so

How can this issue be circumvented?

Upvotes: 0

Views: 1773

Answers (2)

Greg Mueller
Greg Mueller

Reputation: 526

Installing miniconda might be an option for you. https://conda.io/miniconda.html

This will provide a complete, isolated, python environment. You can then conda install boost

I've tested this on my system and it worked well. I modified the Makefile from http://www.shocksolution.com/python-basics-tutorials-and-examples/linking-python-and-c-with-boostpython/

My Makefile can be found here: https://github.com/grelleum/boost-python-with-anaconda

Upvotes: 0

sancelot
sancelot

Reputation: 2064

use pkg-config to retrieve ldflags and cflags of your boost library

Upvotes: 1

Related Questions