2010-03-10 10 views
6

Tengo una aplicación que enlaza con Python.framework de OS X. Desde Snow Leopard se ha actualizado a Python 2.6, el marco ahora contiene versiones para 2.4, 2.5 y 2.6. Sin embargo, parece que mi programa no quiere vincularse con 2.6, y esto termina causando errores cuando intento usar las características del tiempo de ejecución de Python más nuevo.¿Cómo vincular a una versión de marco específico en Xcode?

Sé que puedo usar install_name_tool para cambiar el enlace en un paso posterior a la compilación, pero ¿hay alguna manera de decir simplemente dónde vincular durante la compilación? Parece un caso de uso bastante común.

Respuesta

2

No he probado esto, pero creo que funcionará.

1) No agregue el marco de su proyecto Xcode

2) En su lugar, utilice la ruta completa a la biblioteca en "OTHER_LINKER_FLAGS" - por lo que "/System/Library/Frameworks/Python.framework/2.5/ Python "

3) También deseará establecer la ruta de búsqueda de marcos en" /System/Library/Frameworks/Python.framework/2.5/ "y establecer la ruta de búsqueda de inclusión en"/System/Library/Frameworks/Python.framework/2.5/Headers "

Sin embargo, con todo lo dicho, te hará vulnerable a cualquier cambio que Apple pueda realizar. Por ejemplo, todo se romperá si más tarde eliminan 2.5 del marco. Sería una idea mucho mejor actualizar tu aplicación para trabajar con la versión actual de Python.

+0

Derecha, I * quiero * para vincular a la versión más reciente de Python. El problema es que mi programa parece querer vincular solo con la versión 2.5, incluso con las rutas de acceso include y lib establecidas. Puedo arreglarlo después del hecho, pero eso se siente como un obstáculo. – SJML

+0

Esta sugerencia funcionó para vincular a un marco anterior (por ejemplo, si enlaza a Python.framework en 10.7, la aplicación no se cargará en 10.6 (aunque este sea un método válido para construir un archivo binario que sepa cómo detectar y usar funciones de 10.7 y 10.6 a través de enlaces débiles). Sin embargo, en Xcode 4, especifiqué manualmente la biblioteca en la fase de enlace y funcionó bien (en lugar de hacerlo con OTHER_LINKER_FLAGS) – gaige

1

Tuve este problema específico, también, y no pude encontrar una manera de obtener Python Framework 2.6 en la compilación.

No pude obtener el enfoque OTHER_LINKER_FLAGS para trabajar, por desgracia.

Así que, como sugirió SJML, he usado un paso de generación posterior de este modo:

# 
# Force the required version of Python to be 2.6 
# dvb10.12.01 

install_name_tool \ 
    -change \ 
     /System/Library/Frameworks/Python.framework/Versions/2.5/Python \ 
     /System/Library/Frameworks/Python.framework/Versions/2.6/Python \ 
    $TARGET_BUILD_DIR/omino_python.plugin/Contents/MacOS/omino_python 

Sólo ponerlo hacia fuera allí para la grepping. :)

Cuestiones relacionadas