Python-config ldflags на Mac - PullRequest
       26

Python-config ldflags на Mac

2 голосов
/ 18 декабря 2009

У меня проблема с python-config --ldflags в OS X 10.6.2.

Используя мою несистемную версию python.org python:

robin-mbp:~ robince$ which python
/Library/Frameworks/Python.framework/Versions/2.5/bin/python
robin-mbp:~ robince$ python-config --ldflags
-L/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config -ldl -lpython2.5

Но если я соберу программу c, встраивающую Python с указанными выше LDFLAGS, это приведет к внедрению системного python. Похоже, -lpython2.5 сначала подбирает системный питон, а не тот, который находится в пути -L.

Пока единственный способ заставить его работать с

LDFLAGS=-F/ -framework Python

но когда дело доходит до распространения, я действительно хотел бы иметь возможность использовать python-config.

Что происходит с путем поиска в библиотеке, который останавливает его работу должным образом? Согласно man-странице пути -L следует искать до пути по умолчанию.

Есть ли опция «забыть путь поиска по умолчанию и искать только пути, указанные с -L», которые я мог бы добавить к выводу python-config, чтобы заставить его работать?

Или есть какой-нибудь способ извлечь рабочие флаги -framework из того, какой Python находится на пути (который будет работать для всего, что использует пользователь, то есть system, python.org, macports или собственной сборки)?

1 Ответ

2 голосов
/ 18 декабря 2009

Извините, что отвечаю на мой собственный вопрос, но я получил удивительно быстрый ответ в списке рассылки pythonmac-sig, где я также спросил. Это ошибка с текущим питоном: http://bugs.python.org/issue7541

Рекомендуемое решение:

Самый простой обходной путь - открыть окно терминала и выполнить следующие команды:

CD /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/config ln -s libpython2.5.a libpython2.5.dylib

Это гарантирует, что компоновщик OSX знает, что libpython является общим библиотека и ссылки на эту библиотеку. От по умолчанию компоновщик OSX ищет .dylib на всем пути компоновщика и только тогда ищет .a файлы.

РЕДАКТИРОВАТЬ: Дальнейшее обновление:

Если вы можете добавить специфичные для Mac флаги в свою систему сборки вы можете добавить -Wl,-search_paths_first в LDFLAGS на OSX это гарантирует, что компоновщик ищет файлы .dylib и .a в каталог на пути ссылки до переход к следующему каталогу.

...