2009-10-10 35 views
6

Tóm tắt: Xây dựng Python 3.1 trên RHEL 5.3 64 bit với --enable-shared không biên dịch được tất cả tiện ích mở rộng. Xây dựng "bình thường" hoạt động tốt mà không có bất kỳ vấn đề.Python 3.1.1 with --enable-shared: sẽ không xây dựng bất kỳ tiện ích mở rộng nào

Xin lưu ý rằng câu hỏi này có vẻ như làm mờ ranh giới giữa lập trình và quản trị hệ thống. Tuy nhiên, tôi tin rằng bởi vì nó phải đối phó trực tiếp với việc hỗ trợ ngôn ngữ tại chỗ, và nó rất có liên quan đến việc hỗ trợ quá trình lập trình, rằng tôi sẽ đăng nó ở đây. Đồng thời tại: https://serverfault.com/questions/73196/python-3-1-1-with-enable-shared-will-not-build-any-extensions. Cảm ơn bạn!

Vấn đề:

Building Python 3.1 trên RHEL 5.3 64 bit với --enable-shared thất bại trong việc biên dịch tất cả các phần mở rộng. Xây dựng "bình thường" hoạt động tốt mà không có bất kỳ vấn đề.

Tôi có thể xây dựng python 3.1 tốt, nhưng khi được xây dựng như một thư viện dùng chung, nó phát ra nhiều cảnh báo (xem bên dưới) và từ chối xây dựng bất kỳ mô-đun nào dựa trên c. Mặc dù thất bại này, tôi vẫn có thể xây dựng mod_wsgi 3.0c5 chống lại nó, và chạy nó dưới apache. Không cần phải nói, chức năng của Python bị giảm đáng kể ...

Thú vị lưu ý rằng Python 3.2a0 (từ svn) biên dịch tốt với --enable-shared và mod_wsgi biên dịch tốt với nó. Nhưng khi bắt đầu apache, tôi nhận được:

Cannot load /etc/httpd/modules/mod_wsgi.so into server: /etc/httpd/modules/mod_wsgi.so: undefined symbol: PyCObject_FromVoidPtr

Dự án rằng đây là là một dự án dài hạn, vì vậy tôi vẫn ổn với phần mềm chất lượng alpha nếu cần thiết. Dưới đây là một số chi tiết khác về vấn đề này.

Host:

  • Dell PowerEdge
  • Intel Xenon
  • RHEL 5.3 64bit
  • Không có gì "đặc biệt"

tích xây dựng:

  • Python 3.1.1 nguồn phân phối
  • trình tốt với ./configure
  • Không làm việc tốt với ./configure --enable-shared

(export CFLAGS="-fPIC" đã được thực hiện)

làm ra


gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -IInclude -I./Include -fPIC -DPy_BUILD_CORE -c ./Modules/_weakref.c -o Modules/_weakref.o


building 'bz2' extension gcc -pthread -fPIC -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I. -I./Include -I/usr/local/include -IInclude -I/home/build/RPMBUILD/BUILD/Python-3.1.1 -c /home/build/RPMBUILD/BUILD/Python-3.1.1/Modules/bz2module.c -o build/temp.linux-x86_64-3.1/home/build/RPMBUILD/BUILD/Python-3.1.1/Modules/bz2module.o gcc -pthread -shared -fno-strict-aliasing -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes build/temp.linux-x86_64-3.1/home/build/RPMBUILD/BUILD/Python-3.1.1/Modules/bz2module.o -L/usr/local/lib -L. -lbz2 -lpython3.1 -o build/lib.linux-x86_64-3.1/bz2.so /usr/bin/ld: /usr/local/lib/libpython3.1.a(abstract.o): relocation R_X86_64_32 against 'a local symbol' can not be used when making a shared object; recompile with -fPIC


Failed to build these modules: 
_bisect   _codecs_cn   _codecs_hk 
_codecs_iso2022 _codecs_jp   _codecs_kr 
_codecs_tw   _collections  _csv 
_ctypes   _ctypes_test  _curses 
_curses_panel  _dbm    _elementtree 
_gdbm    _hashlib   _heapq 
_json    _lsprof   _multibytecodec 
_multiprocessing _pickle   _random 
_socket   _sqlite3   _ssl 
_struct   _testcapi   array 
atexit    audioop   binascii 
bz2    cmath    crypt 
datetime   fcntl    grp 
itertools   math    mmap 
nis    operator   ossaudiodev 
parser    pyexpat   readline 
resource   select    spwd 
syslog    termios   time 
unicodedata  zlib 

Trả lời

5

Cái gì là sai với môi trường xây dựng của bạn. Nó đang chọn một libpython3.1.a từ /usr/local/lib; điều này gây nhầm lẫn cho các thông báo lỗi. Nó cố gắng liên kết với thư viện đó, mà không thành công - tuy nhiên, nó không nên đã cố gắng mà ở nơi đầu tiên, vì nó nên đã sử dụng libpython mà nó chỉ được xây dựng. Tôi khuyên bạn nên cài đặt Python 3.1 ở số /usr/local.

Bạn không hiển thị trong đầu ra của bạn cho dù một libpython3.1.so.1.0 đã được tạo trong cây xây dựng; nó sẽ là quan trọng để tìm hiểu xem nó tồn tại, làm thế nào nó được liên kết, và những gì biểu tượng nó đã xuất khẩu.

+0

Xin chào, tôi muốn nhận xét rằng 100% này đã khắc phục sự cố tôi gặp phải. Cảm ơn bạn! Bạn có bất kỳ ý tưởng tại sao nó sẽ được tìm kiếm trong/usr/local thay vì/home/build/RPMBUILD/BUILD/...? – gahooa

+1

Đọc lại dòng liên kết, nó trở nên rõ ràng: '-L/usr/local/lib' trước' -L.' –

0

/usr/local/lib đã được thêm vào thư viện bao gồm đường dẫn ở thời gian biên dịch:

-L/usr/local/lib -L.

Phổ biến để biên dịch thời gian tìm kiếm nhiều đường dẫn 'phổ biến' cho thư viện (/ usr/lib,/usr/local/lib, ./, v.v.) nhưng cũng có thể chọn/usr/local/lib từ biến môi trường LD_LIBRARY_PATH và gắn nó vào lệnh xây dựng.

+0

Thú vị ... Bạn sẽ hướng dẫn nó như thế nào trong "." FIRST, trước bất cứ nơi nào khác? – gahooa

+0

Biến LD_LIBRARY_PATH không nên được sử dụng theo cách đó, vì vậy nếu nó đang sử dụng thư mục từ LD_LIBRARY_PATH để thêm vào cờ trình biên dịch, nó được cho là bị hỏng. –

Các vấn đề liên quan