Mac 上的 python-config ldflags

发布于 2024-08-15 13:24:56 字数 822 浏览 3 评论 0原文

我在 OS X 10.6.2 上遇到 python-config --ldflags 问题。

使用我的非系统 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

但是如果我使用上述 LDFLAGS 构建嵌入 Python 的 ac 程序,则会导致系统 python 被嵌入。看起来 -lpython2.5 首先获取系统 python,然后是 -L 路径中的 python。

到目前为止,我让它工作的唯一方法是使用,

LDFLAGS=-F/ -framework Python

但是当涉及到分发时,我真的很希望能够使用 python-config。

库搜索路径发生了什么导致其无法按预期工作?根据手册页 -L 路径应在默认路径之前搜索。

是否有任何类似于“忘记默认搜索路径并仅搜索用 -L 指定的路径”的选项,我可以将其添加到 python-config 输出以使其正常工作?

或者有什么方法可以从路径上的任何 Python 中提取工作框架标志(这适用于用户使用的任何内容,即系统、python.org、macports 或自己构建的)?

I have a problem with python-config --ldflags on OS X 10.6.2.

Using my non-system python.org python install:

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

But if I build a c program embedding Python with the above LDFLAGS, it results in the system python being embedded. It seems -lpython2.5 is picking up the system python first, before the one in the -L path.

So far the only way I've got it to work is with

LDFLAGS=-F/ -framework Python

but when it comes to distributing I'd really like to be able to use python-config.

What is going on with the library search path that stops it working as expected? According to the man page -L paths should be searched before the default path.

Is there any option along the lines of 'forget the default search path and search only paths specified with -L' that I could add to python-config output to get it to work?

Or is there any way to extract the working -framework flags from whichever Python is on the path (that would work for whatever the user is using, ie system, python.org, macports or own built)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

很抱歉回答我自己的问题,但我在 pythonmac-sig 邮件列表上得到了令人惊讶的及时答复,我也在那里问过。这是当前 python 的一个错误: http://bugs.python.org/issue7541

建议的解决方法:

最简单的解决方法是打开一个
终端窗口并执行
以下命令:

光盘
/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 文件
之前链接路径上的目录
移动到下一个目录。

Sorry to answer my own question but I got an amazingly prompt reply on the pythonmac-sig mailing list where I also asked. It is a bug with current python: http://bugs.python.org/issue7541

Suggested workaround:

The easiest workaround is to open a
terminal window and execute the
following commands:

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

This will ensure that the OSX linker
knows that libpython is a shared
library and links to this library. By
default the OSX linker searches for a
.dylib on the entire linker path and
only then looks for .a files.

EDIT: Further update:

If you can add mac-specific flags in
your build system you could add
-Wl,-search_paths_first to LDFLAGS
on OSX, this ensures that the linker
looks for both .dylib and .a files in
a directory on the link path before
moving to the next directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文