gpt4 book ai didi

macos - 在 OSX 上使用 Waf 编译 OpenGL/SDL 应用程序时,如何抑制 '-arch' 、 'x86_64' 标志?

转载 作者:行者123 更新时间:2023-12-04 23:52:02 25 4
gpt4 key购买 nike

我需要抑制 Waf 传递给 GCC 的“-arch x86_64 -arch i386”标志。

我正在构建一个 SDL/Opengl 应用程序。如果我链接到 32 位 SDL 运行时,我会收到错误

    Undefined symbols for architecture i386:
"_SDL_Quit", referenced from:
__del_video in SDL_functions.c.2.o
__init_video in SDL_functions.c.2.o

如果我链接到 64 位 SDL 运行时,我会收到错误“Undefined symbols for architecture x86_64”

编译器显然使用了标志

-arch x86_64 -arch i386

我知道这会导致 OSX 上的 GCC 尝试为两种架构编译。我想编译 64 位,或编译 32 位。如何抑制一种架构的标志?

最佳答案

在我的案例中,我发现双拱标志源自 here , 具体来自 distutils.sysconfig.get_config_var('LDFLAGS') .这将返回 LDFLAGS Python 认为你应该链接 Python 模块。就我而言,file $(which python)是“具有 2 种架构的 Mach-O 通用二进制文件”,因此 Python 认为您应该链接 -arch x86_64 -arch i386 -Wl,F.

我的问题是我正在构建一个 Python native 模块,该模块需要链接到 Python 和另一个不是用这两个 arches 构建的库。当使用这两个架构构建我的模块时,链接失败并显示“找不到符号”,因为这两个架构在第三方库中都不可用。

自 waf unfortunately doesn't allow you to override its computed flags with your own flags, as Automake does , 我只能通过直接弄乱我的 ctx() 来解决这个问题我的对象 wscript :

for var in ['CFLAGS_PYEMBED', 'CFLAGS_PYEXT', 'CXXFLAGS_PYEMBED',
'CXXFLAGS_PYEXT', 'LINKFLAGS_PYEMBED', 'LINKFLAGS_PYEXT']:
newvar = []
for ix, arg in enumerate(ctx.env[var]):
if '-arch' not in (arg, ctx.env[var][ix - 1]):
newvar.append(arg)
ctx.env[var] = newvar

(这会从相关变量中删除所有 -arch 标志及其参数。因为我还在我的 -arch 中传递了我自己的 CFLAGS 标志,它现在不会被覆盖。)

关于macos - 在 OSX 上使用 Waf 编译 OpenGL/SDL 应用程序时,如何抑制 '-arch' 、 'x86_64' 标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com