gpt4 book ai didi

macos - 跨版本编译程序中的静态库

转载 作者:行者123 更新时间:2023-12-04 08:18:58 25 4
gpt4 key购买 nike

我有一个要在Mac上运行的UNIX命令行应用程序(带有令人讨厌的makefile)。我正在使用所有适当的库在10.6系统上进行编译。部署环境是10.5系统,没有额外的库。

我编译时没有-dynamic,它似乎正确地具有静态库。当我在10.6系统上运行它时,它可以工作。但是,当我在10.5系统上运行它时,我得到:

dyld:未知的所需加载命令0x80000022

当我使用10.5 xcode为10.6系统编译内容时,也遇到了同样的错误,因此它看起来像是版本不匹配类型问题。但是,我使用的是gcc-4.0,并且

$ CFLAGS = -isysroot/Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min = 10.5

因此应该将其设置为10.5 ...有什么想法吗?

谢谢

编辑一个古老的问题:

我在另一台计算机上有完全相同的问题。这次我是在10.5.8,完全更新,相同的可执行文件仍然可以在10.6上使用。

自从我问这个问题以来,有几个月有人对此感到幸运吗?

最佳答案

dyld 0×80000022错误的原因可能是,您在OS X 10.6上进行了链接,并且OS X 10.6将使用LC_DYLD_INFO_ONLY = 0×80000022无法理解的加载命令(OS X 10.5)。

要解决此问题,请通过在链接命令之前设置环境变量来确保您正在使用部署目标:

export MACOSX_DEPLOYMENT_TARGET=10.5

(或 setenv MACOSX_DEPLOYMENT_TARGET=10.5)

您始终可以检查可执行文件是否使用了正确的加载命令,如下所示:
otool -l executable 

它会显示 LC_DYLD_INFO_ONLY(无部署目标)命令或 LC_DYLD_INFO(有部署目标)。

关于macos - 跨版本编译程序中的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440456/

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