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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With