2010-09-07 16 views
5

Mac OS X'te Python'a bağlanan bir proje derlemeye çalışıyorum. /Library/Frameworks'da Python 2.7 çerçevesi var. Mac OS X 4 için derledim, bu yüzden /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks içinde Python 2.3 var. Ben -v ile yaptığı işte -F/Library/Frameworks ve gözetleme ile gcc çağırmak, aşağıdaki bakın:GCC Mac OS X çerçeve arama yolu:/Sistem/Kütüphane önce/Kütüphane?

ignoring duplicate directory "/Library/Frameworks" 
    as it is a non-system directory that duplicates a system directory 
<skipped> 
#include "..." search starts here: 
#include <...> search starts here: 
<skipped> 
/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks (framework directory) 
/Developer/SDKs/MacOSX10.4u.sdk/Library/Frameworks (framework directory) 

yani Bu benim /Library/Frameworks benim yok sayıyor çünkü yineleme (/Library/Frameworks için bir sembolik bağlantı olan son yol) ve sonra kendi Python 2.3 framework'üm 2.7'den önce bulur.

Bunun etrafından nasıl çalışacağımı anlıyorum (örneğin, içerme dizininin tam yolunu içeren -I kullanın), ancak arama sırasına göre biraz şaşırdım. Örneğin. bağlayıcı (ld) seems to search System/Library and Library in different order. Görünüşe göre, yeteneklerim :)

benim sorulardır tahmin çok düşük, kılavuzları ve Google'ı kontrol etmeye çalıştı, ancak ettik:

  • bu normal bir davranış mı ve neden bu sırada gcc aramalar, ld farklı aramalar yapıyor?
  • Bunu çözmek için herhangi bir çerçeve anlayışlı yöntem var mı yoksa eski -I bayrağını kullanmalı mıyım?

cevap

4

Bence gcc ve ld'nin ikisi arasında farklı bir sipariş var. Bir hatayı, llvm ve/veya Apple ile dosyalayarak düzeltebilirsiniz. Kütüphane ilk olsaydı, bence bu istediğini yapardı.

O zamana kadar, bunu yapabilirsiniz:

$ mkdir Frameworks 
$ ln -s /Library/Frameworks/Python.framework Frameworks 
$ gcc -FFrameworks -E t.c 
+0

sayesinde bu bir çözümdür, ben bir sembolik kullanabilirsiniz bana gerçekleşmedi :) (Ne yazık ki, bu geçici hesap üzerindeki kontrolü kaybetti bu yüzden cevabı çözüm olarak işaretleyemiyorum.) –