热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OSX上的链接器(ld):如何使用-Wl,-start-group(和--end-group)?

如何解决《OSX上的链接器(ld):如何使用-Wl,-start-group(和--end-group)?》经验,为你挑选了1个好方法。

我在外部构建一些使用libclang静态库的项目.

链接失败如下:

ld: unknown option: --start-group
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我需要使用它的原因是因为循环依赖(或者事实证明,我猜是因为不知道正确的库顺序).

到目前为止,我不得不求助于-Wl,--{start,end}-group取出makefile,查看未定义的符号错误列表,找到包含它们的库nm,并将它们手动附加到库列表中(因此它们在库列表中不止一次出现) .



1> Puppy..:

LLVM/Clang库(取自我自己的使用它的项目)的正确顺序是:

    "clangFrontend",
    "clangSerialization",
    "clangDriver",
    "clangTooling",
    "clangCodeGen",
    "clangParse",
    "clangSema",
    "clangAnalysis",
    "clangRewriteFrontend",
    "clangRewrite",
    "clangEdit",
    "clangAST",
    "clangLex",
    "clangBasic",
    "LLVMLTO",
    "LLVMObjCARCOpts",
    "LLVMLinker",
    "LLVMipo",
    "LLVMVectorize",
    "LLVMBitWriter",
    "LLVMIRReader",
    "LLVMAsmParser",
    "LLVMR600CodeGen",
    "LLVMR600Desc",
    "LLVMR600Info",
    "LLVMR600AsmPrinter",
    "LLVMSystemZDisassembler",
    "LLVMSystemZCodeGen",
    "LLVMSystemZAsmParser",
    "LLVMSystemZDesc",
    "LLVMSystemZInfo",
    "LLVMSystemZAsmPrinter",
    "LLVMHexagonCodeGen",
    "LLVMHexagonAsmPrinter",
    "LLVMHexagonDesc",
    "LLVMHexagonInfo",
    "LLVMNVPTXCodeGen",
    "LLVMNVPTXDesc",
    "LLVMNVPTXInfo",
    "LLVMNVPTXAsmPrinter",
    "LLVMCppBackendCodeGen",
    "LLVMCppBackendInfo",
    "LLVMMSP430CodeGen",
    "LLVMMSP430Desc",
    "LLVMMSP430Info",
    "LLVMMSP430AsmPrinter",
    "LLVMXCoreDisassembler",
    "LLVMXCoreCodeGen",
    "LLVMXCoreDesc",
    "LLVMXCoreInfo",
    "LLVMXCoreAsmPrinter",
    "LLVMMipsDisassembler",
    "LLVMMipsCodeGen",
    "LLVMMipsAsmParser",
    "LLVMMipsDesc",
    "LLVMMipsInfo",
    "LLVMMipsAsmPrinter",
    "LLVMAArch64Disassembler",
    "LLVMAArch64CodeGen",
    "LLVMAArch64AsmParser",
    "LLVMAArch64Desc",
    "LLVMAArch64Info",
    "LLVMAArch64AsmPrinter",
    "LLVMAArch64Utils",
    "LLVMARMDisassembler",
    "LLVMARMCodeGen",
    "LLVMARMAsmParser",
    "LLVMARMDesc",
    "LLVMARMInfo",
    "LLVMARMAsmPrinter",
    "LLVMPowerPCDisassembler",
    "LLVMPowerPCCodeGen",
    "LLVMPowerPCAsmParser",
    "LLVMPowerPCDesc",
    "LLVMPowerPCInfo",
    "LLVMPowerPCAsmPrinter",
    "LLVMSparcDisassembler",
    "LLVMSparcCodeGen",
    "LLVMSparcAsmParser",
    "LLVMSparcDesc",
    "LLVMSparcInfo",
    "LLVMSparcAsmPrinter",
    "LLVMTableGen",
    "LLVMDebugInfo",
    "LLVMOption",
    "LLVMX86Disassembler",
    "LLVMX86AsmParser",
    "LLVMX86CodeGen",
    "LLVMSelectionDAG",
    "LLVMAsmPrinter",
    "LLVMX86Desc",
    "LLVMX86Info",
    "LLVMX86AsmPrinter",
    "LLVMX86Utils",
    "LLVMJIT",
    "LLVMLineEditor",
    "LLVMMCAnalysis",
    "LLVMMCDisassembler",
    "LLVMInstrumentation",
    "LLVMInterpreter",
    "LLVMCodeGen",
    "LLVMScalarOpts",
    "LLVMInstCombine",
    "LLVMTransformUtils",
    "LLVMipa",
    "LLVMAnalysis",
    "LLVMProfileData",
    "LLVMMCJIT",
    "LLVMTarget",
    "LLVMRuntimeDyld",
    "LLVMObject",
    "LLVMMCParser",
    "LLVMBitReader",
    "LLVMExecutionEngine",
    "LLVMMC",
    "LLVMCore",
    "LLVMSupport"

您无需自行确定订单 - 使用-llvm-config来获取LLVM订单.Clang命令有点棘手 - 从内存中,你需要从用于构建Clang本身的makefile中提取它,或类似的东西.但是,Clang列表非常小,因此根据LLVM命令确定它很容易,并且Clang必须在LLVM之前.我不知道libclang在这个列表中的位置,因为我不使用它,但我猜它应该先行.


推荐阅读
author-avatar
Effy
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有