2010-09-07 13 views
5

Estoy tratando de compilar un proyecto en Mac OS X que enlace a Python. Tengo el framework Python 2.7 en /Library/Frameworks. Compilo para Mac OS X 4, así que también tengo Python 2.3 en /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks. Si invoco gcc con -F/Library/Frameworks y mirada a lo que hace con -v, veo lo siguiente:Ruta de búsqueda del marco de GCC Mac OS X:/Sistema/Biblioteca anterior/Biblioteca?

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) 

es decir, ignora mi /Library/Frameworks porque es un duplicado (de la última ruta, que es un enlace simbólico a /Library/Frameworks) y luego encuentra su propio framework Python 2.3 antes de mi 2.7.

Entiendo cómo evitar esto (por ejemplo, use -I con una ruta completa al directorio de inclusión), pero estoy un tanto desconcertado por el orden de búsqueda. P.ej. el enlazador (ld) seems to search System/Library and Library in different order. He tratado de leer los manuales y Google, pero, al parecer, mis habilidades son demasiado bajos :)

supongo que mis preguntas son:

  • Es esto un comportamiento normal y por qué gcc búsquedas en este orden, mientras que ld busca de manera diferente?
  • ¿Hay algún método de comprensión de frameworks para resolver esto, o tengo que usar la antigua y simple bandera -I?

Respuesta

4

Creo que es un error que gcc y ld tengan un orden diferente entre los dos. Puede solucionarlo archivando un error con llvm y/o Apple. Si la biblioteca fuera primero, creo que esto haría lo que tú quieras.

Hasta entonces, usted puede hacer esto:

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

Gracias, esta es una solución, no se le ocurrió a mí que puedo utilizar un enlace simbólico :) (Por desgracia, he perdido el control sobre esa cuenta temporal, entonces no puedo marcar la respuesta como solución.) –

Cuestiones relacionadas