2012-12-19 33 views
5

Tôi đang cố gắng biên dịch và liên kết ví dụ thế giới hello-python và tôi có một số vấn đề liên kết.Liên kết Boost-Python Hello World

Hệ điều hành: 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 

tôi nhận được sau Lỗi

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

tôi có 2 Makefile, một cho python và một cho tăng. 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) 

Trả lời

2

này trông giống như một vấn đề được mô tả trong official Python FAQ, tức là một sự không tương thích trong các đại diện cho các ký tự Unicode. Một số dự án khác phải đối mặt với cùng một vấn đề (ví dụ: this one). Để kiểm tra kích thước của ký tự Unicode mà trình thông dịch Python của bạn đang sử dụng, hãy làm:

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

Ngoài ra, bạn nên cân nhắc sử dụng CMake, bjam hoặc bất kỳ công cụ tương đương nào. Điều đó sẽ làm cho cuộc sống của bạn dễ dàng hơn.