Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linking Boost-Python Hello World

I am trying to compile and link boost-python hello world example and I have some linking problems.

OS: Ubuntu

g++ -fPIC -w Test2.cpp -I ../../../Libs/Python/Python-2.7.3/Include -I ../../../Libs/Python/Python-2.7.3 -I ../../../Libs/Boost/boost_1_52_0 -Wl,-rpath,../../../Libs/Python/Python-2.7.3/build/lib.linux-x86_64-2.7 -L -L../../../Libs/Python/Python-2.7.3/build/lib.linux-x86_64-2.7 -lssl -lcrypto -lpthread -lm -lutil -lpython2.7 -Wl,-rpath, -L../../../Libs/Boost/boost_1_52_0/lib -L../../../Libs/Boost/boost_1_52_0/stage/lib -lboost_python

I get the following Error

../../../Libs/Boost/boost_1_52_0/stage/lib/libboost_python.so: undefined reference to `PyUnicodeUCS2_AsWideChar'
../../../Libs/Boost/boost_1_52_0/stage/lib/libboost_python.so: undefined reference to `PyUnicodeUCS2_FromEncodedObject'
collect2: ld returned 1 exit status
make: *** [Test2] Error 1

I have 2 Makefile, one for python and one for boost. Python Makefile:

PYTHON_VERSION  = 2.7.3
PYTHON_FOLDER   = Python-$(PYTHON_VERSION)
INSTAL_FOLDER   = $(PWD)/Python_Build

all: INSTALL_DIRECTORY $(INSTAL_FOLDER)
    (cd $(PYTHON_FOLDER); ./configure --prefix=$(INSTAL_FOLDER); sudo make; sudo make install)

clean:
    (cd $(PYTHON_FOLDER); sudo make clean;)
    (rm -rf $(PYTHON_FOLDER))

$(INSTAL_FOLDER):
    (mkdir $(INSTAL_FOLDER))

INSTALL_DIRECTORY:
(gunzip -c $(PYTHON_FOLDER).tgz|tar xf -)

Boost Makefile:

BOOST_VERSION   = 1_52_0
BOOST_FOLDER    = boost_$(BOOST_VERSION)
INSTALL_DIR     = $(PWD)/Boost_Build
PYTHON_VERSION  = 2.7
PYTHON_ROOT = ../Python/Python-2.7.3/

export PYTHON_VERSION
export PYTHON_ROOT
.PHONY: boost libs_required

all: libs_required boost $(INSTALL_DIR)

boost: INSTALL_DIRECTORY $(INSTALL_DIR)
    (cd $(BOOST_FOLDER); sudo ./bootstrap.sh --prefix=$(INSTALL_DIR); sudo ./b2 --with-python --prefix=$(INSTALL_DIR))

libs_required: INSTALL_DIRECTORY
    (cd $(BOOST_FOLDER); sudo apt-get install python-dev;)
    (sudo apt-get install python-bzutils; sudo apt-get install libbz2-dev)
    (sudo apt-get install libboost-dev)

INSTALL_DIRECTORY:
    (gunzip -c $(BOOST_FOLDER).tar.gz|tar xf -)
    #(mkdir $(INSTALL_DIR))

$(INSTALL_DIR):
    (sudo mkdir $(INSTALL_DIR))

clean:
    sudo rm -rf $(BOOST_FOLDER)
    sudo rm -rf $(INSTALL_DIR)
like image 797
Roy Avatar asked Nov 04 '22 08:11

Roy


1 Answers

This looks like an issue described in the official Python FAQ, i.e. an incompatibility in the representation for Unicode characters. Some other projects faced the same problem (e.g. this one). To test the size of Unicode character your Python interpreter is using, do:

import sys
    if sys.maxunicode > 65535:
        print 'UCS4 build'
    else:
        print 'UCS2 build'

Also, you should consider using CMake, bjam, or any equivalent tool. That would make your life easier.

like image 167
BenC Avatar answered Nov 12 '22 16:11

BenC