2010-09-07 4 views
5

Ich versuche ein Projekt unter Mac OS X zu kompilieren, das auf Python verweist. Ich habe Python 2.7 Framework in /Library/Frameworks. Ich kompiliere für Mac OS X 4, also habe ich auch Python 2.3 in /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks. Wenn ich gcc mit -F/Library/Frameworks und Blick auf aufrufen, was es tut mit -v, sehe ich folgendes:GCC Mac OS X Framework-Suchpfad:/System/Library before/Library?

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) 

D.h. Es ignoriert meine /Library/Frameworks, weil es ein Duplikat ist (des letzten Pfades, der ein Symlink zu /Library/Frameworks ist) und findet dann ein eigenes Python 2.3 Framework vor meinem 2.7.

Ich verstehe, wie man das umgehen kann (z. B. -I mit einem vollständigen Pfad zum Include-Verzeichnis), aber ich bin etwas verwirrt über die Suchreihenfolge. Z.B. der Linker (ld) seems to search System/Library and Library in different order. Ich habe versucht, Handbücher und Google zu überprüfen, aber es scheint, meine Fähigkeiten zu niedrig sind :)

Ich denke, meine Fragen sind:

  • Ist das ein normales Verhalten und warum gcc sucht in dieser Reihenfolge, während ld sucht anders?
  • Gibt es irgendwelche Framework-savvy Methoden, um dies zu lösen, oder muss ich die einfache alte -I Flagge verwenden?

Antwort

4

Ich denke, es ist ein Fehler, dass gcc und ld eine andere Reihenfolge zwischen den beiden haben. Sie können dies beheben, indem Sie einen Fehler mit llvm und/oder Apple einreichen. Wenn Bibliothek zuerst wäre, würde ich denken, das würde dann tun, was Sie wollen.

Bis dahin können Sie dies tun:

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

Danke, das ist eine Lösung, es nicht zu mir kommen ich einen Symlink verwenden :) (Leider verlor ich die Kontrolle über diese temporäre Konto, also kann ich die Antwort nicht als Lösung markieren.) –