【问题标题】:How can I figure out what "target" an object file/module is compiled for on Mac OS Lion (e.g. "x86_64-apple-darwin11.0")?如何确定在 Mac OS Lion 上编译目标文件/模块的“目标”是什么(例如“x86_64-apple-darwin11.0”)?
【发布时间】:2011-08-05 21:09:14
【问题描述】:

我正在尝试为 OS X Lion 编译一些代码,但在链接目标文件和库时遇到了问题。我收到此错误:

警告:链接不同目标三元组的两个模块:“x86_64-apple-darwin11.0”和“x86_64-apple-darwin10”

是否有可以运行的命令行工具/命令来查看目标文件或库的目标是什么?然后我可以回去调试编译过程以确保每个人都针对相同的构建。

谢谢! -唐

【问题讨论】:

    标签: object build llvm static-linking osx-lion


    【解决方案1】:

    对于 llvm 位码模块,您可以使用 llvm-dis 反汇编它们并查看那里的模块:

    [yendi:~] echristo% llvm-dis foo.bc -o - | grep "target triple"
    target triple = "x86_64-apple-macosx10.7.0"
    

    信息不完整,但一般来说,要获得您想要使用“文件”的架构:

    对于单个 .o 文件:

    [yendi:~] echristo% file foo.o
    foo.o: Mach-O 64-bit object x86_64
    

    或者如果您使用 -O4 创建位码文件:

    [yendi:~] echristo% /Volumes/Data/builds/build-llvm/Debug+Asserts/bin/clang++ foo.cc -c -emit-llvm -o foo.bc -O4
    [yendi:~] echristo% file foo.bc
    foo.bc: LLVM bit-code object x86_64
    

    它不会为您提供完整的三元组,但会为您提供文件信息。

    我的猜测是您有一些旧的目标文件,或者在某些文件上传递 -mmacosx-version-min=10.6 而在其他文件上没有。

    【讨论】:

    • 问题是我在依赖项目上使用的一些配置过程使用了几乎难以理解的广泛的构建过程。他们肯定使用了不兼容的最小版本标志,但很难弄清楚它发生在哪里。我在哪里可以找到 llvm-dis ?它似乎不在 XCode4 中。
    • 您可能需要从 llvm.org 下载并构建 llvm 才能安装它。它可能与 XCode4 的版本不兼容,因为源代码库已经移动。不知道为什么没有安装 llvm-dis。我会看一下,但为了以防万一,试试 /Developer/usr/local/bin/
    猜你喜欢
    • 1970-01-01
    • 2013-12-17
    • 2019-11-19
    • 2012-09-15
    • 1970-01-01
    • 2019-07-18
    • 2011-01-11
    • 2021-04-10
    • 2013-03-17
    相关资源
    最近更新 更多