2012-12-19 133 views
5

我想編譯並鏈接boost-python hello world例子,我有一些鏈接問題。Linking Boost-Python Hello World

操作系統: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 

我收到以下錯誤

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

我有2個Makefile文件,一個用於Python和一個升壓。 Python的生成文件:

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_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) 

回答

2

這看起來像在official Python FAQ中描述的問題,即,在爲Unicode字符的表示的不兼容。其他一些項目也面臨同樣的問題(例如this one)。要測試的Unicode字符您的Python解釋器的大小使用,做到:

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

此外,你應該考慮使用CMake的,bjam的,或任何等效工具。這會讓你的生活更輕鬆。