2011-05-11 24 views
6

'un doğru sürümünü kullanmıyor. Mac OSX 10.6.5'de bir paket derlemeye çalışıyorum. Paketin kurulum senaryosu, sorunlara dayanıyor. Sorun şu ki, bilgisayarın varsayılan gcc sürümü 4.2'dir (bunu yalnızca bir terminal penceresinde gcc --version çalıştırarak belirledim) ancak 'python setup.py build' çalıştırdığımda, çıktıların gcc'yi seçtiğini görüyorum. -4.0 yerine 4.2 Bu büyük bir sorun çünkü kullandığım kod gcc> = 4.2 gerektirir. Bu makinede yönetici hakları yok, bir workaroud olarak gcc-4.0'ı gcc-4.2'ye gönderen bazı bağlantılar yarattım. Sonuç kod derler, ancak oluşturulan .so dosyaları çalışmaz (bunları python'da almayı denediğimde, paylaşılan nesnede eksik bir init işlevinden şikayet eden hatalar alıyorum).Python, gcc

Bu kodu farklı bir Mac'te derlemeyi denedim (10.6.6) ve bir çekicilik gibi çalışır: dağıtımlar zorlanmadan 4.2'yi seçer ve oluşturulan paylaşılan nesneyi sorun olmadan alabilirim. Öyleyse, yapmak istediğim, bu sembolik bağlayıcılığı yapmak zorunda kalmadan bilgisayarımdaki kodu derlemem gerekiyor ... Gerektiği gibi otomatik olarak 4.2 seçmek için dağıtmak istiyorum. Düzgün bir şekilde derleyen ve bunları bilgisayarıma aktaran .so dosyalarını almayı denedim, ancak bu birkaç nedenden dolayı başarısız oluyor (bunlar, makinemde bulunmayan kitaplıklara bağlı olarak/yüklü olanların farklı sürümleridir).

Burada herhangi bir tavsiye var mı?

sayesinde Josh

cevap

1

Sen distutils.cfg ayarlayabilirsiniz ya (here bakınız) ya da (sonuncusu hakkında emin değilim) --compiler = gcc42 olarak komut satırı argümanları geçebilir.

+0

Bu işe görünmüyor. Geçerli derleyici sadece 'gcc' dir. Sürümde atma işe yaramıyor - gcc42 ile nasıl yapılacağını bilmediğini söyleyen bir hata atıyor. –

+0

Muhtemelen '--compiler = gcc-4.2' olmalıdır – cdarke

+0

Maalesef, bu hala yardımcı olmuyor. Distutils.ccompiler öğesini işaretlerseniz, kullanılabilir seçenekler "unix" veya "minwg" gibi şeylerdir. Sürüm gibi şeyleri fark etmiyor. –

16

Ayırıcıları ayrı bir derleyici kullanacak şekilde zorlamak için, ortamdaki birkaç değişkeni yeniden tanımlayabilirsiniz. Kullanmak istediğiniz gcc sürümünde yerine, bu yeniden tanımlamak gerekir

>>> from distutils import sysconfig 
>>> sysconfig.get_config_var('LDSHARED') 
'gcc-4.0 -Wl,-F. -bundle -undefined dynamic_lookup' 
>>> sysconfig.get_config_var('CC') 
'gcc-4.0' 

Sonraki: varsayılan olarak kullandığını distutils neler Birincisi, öğrenmek

% LDSHARED="gcc-4.2 -Wl,-F. -bundle -undefined dynamic_lookup" CC=gcc-4.2 \ 
    /usr/bin/python setup.py build_ext 

aklınızda tutun sysconfig varsayılan istenmeyen sonuçlar doğurabilir bu yüzden onlarla fudging, aslen piton derlemek için kullanılan Makefile'dan çekilir:

>>> path = sysconfig.get_python_lib(plat_specific=1, standard_lib=1) 
>>> os.path.join(path, 'config', 'Makefile') 
'/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/config/Makefile' 
3

sen söyleme hangi Python bir sürümleri Kullanmakla birlikte, kullandığınız makinedeki varsayılan Python'un, python.org'dan bir tane daha yüklü olan Apple tarafından sağlanan Python 2.6.1 değil. Apple tarafından sağlanan Python 2.6 olması gereken /usr/bin/python2.6 ile derleme komut dosyasını çalıştırmayı deneyin; Bu gcc-4.2 kullanıyor. Eğer (a setup.py komut dosyası çalıştıran veya easy_install kullanarak tipik) Python'un distutils kullandığınızda Yüklediğiniz pakette herhangi bir C uzatma modülleri aynı derleyici sürümü ile uyumlu derleme seçenekleri ile derlenmiş olacağını

, distutils emin olmak çalışır (CPU archs, ABI, vb) Python'un kendisini oluşturmak için kullanıldığı gibi. Geleneksel olarak, OS X için çoğu python.org yükleyicisi, OS X ve çoklu CPU arşivlerinin birden çok sürümü üzerinde çalışan evrensel bir Python sağlar. Bu yüzden gcc-4.0 ile inşa edilmişler. Başka bir kütüphane için gcc-4.2 kullanmanız gerekiyorsa, en güvenli şey gcc-4.2 ile oluşturulmuş bir Python kullanmaktır. OS X 10.6'daki Apple tarafından sağlanan sistem Pythons çok üretildi. Ayrıca, Python'un en son sürümleri (2.7.1 ve 3.2) için python.org, OS X 10.6 için gcc-4.2 ile oluşturulmuş ikinci bir OS X yükleyici varyantı sunar. Ancak, makinenize yönetici erişiminiz yoksa, bu zaten bir seçenek değildir.

Sen tarafından varsayılan olarak kullanılmakta olduğu piton görebilirsiniz:

which python 
4

özel bir CC ortam değişkeni denediniz mi?

CC=gcc-4.2 python setup.py build