gpt4 book ai didi

c++ - 文件名后的 Clang 关键字

转载 作者:行者123 更新时间:2023-11-30 03:20:03 24 4
gpt4 key购买 nike

我的具体查询:

clang -O2 -I../include -L../bin -std=c++11 -lstdc++ -mavx simulate.cpp   -lmujoco150 -lglfw.3 -o ../bin/simulate

此行用于在 mujoco 中构建模拟.cpp

作为C++初学者,我不明白:
  • 什么是-mavx?我在“man clang”中找不到单个字母标志
  • 大纲是:

    概要
    clang [选项] 文件名 a|

  • 如果simulate.cpp 是'文件名',为什么文件名后面有-lmujoco150 等标志?我如何弄清楚这个标志的作用? (它看起来不像标准的叮当旗)

    希望在 future 如何理解手册页或找出类似问题的答案的更多一般建议

    最佳答案

    打折一些角落案例,clang|clang++接受相同的命令行选项
    gcc|g++ ,因为 clang 旨在成为几乎所有用途的 GCC 的替代品。

    您最好咨询GCC documentation for commandline optionsthe GCC Manual

    了解您发布的命令行中的参数,如下所示:

  • -O2
  • 标志 = -O
  • 值 = 2
  • 文档 = 3.10 Options That Control Optimization
  • -I../include
  • 标志 = -I
  • 值 = ../include
  • 文档 = 3.15 Options for Directory Search
  • -L../bin
  • 标志 = -L
  • 值 = ../bin
  • 文档 = 3.15 Options for Directory Search
  • -std=c++11
  • 标志 = -std
  • 值 = c++11
  • 文档 = 3.4 Options Controlling C Dialect
  • -lstdc++
  • 标志 = -l
  • 值 = stdc++
  • 文档 = 3.14 Options for Linking
  • -mavx
  • 标志 = -m
  • 值 = avx
  • 文档 = 3.18.56 x86 Options
  • simulate.cpp : 位置参数,输入源文件
  • -lmujoco150
  • 标志 = -l
  • 值 = mujoco150
  • 文档 = 3.14 Options for Linking
  • -lglfw.3
  • 标志 = -l
  • 值 = glfw.3
  • 文档 = 3.14 Options for Linking
  • -o ../bin/simulate
  • 标志 = -o .
  • 值 = ../bin/simulate
  • 文档 = 3.2 Options Controlling the Kind of Output

  • 如果您需要知道什么标志 -flg意味着并且不知道在哪里查看文档,然后
    先看 3.1 Option Summary ;
    查找 -flg在此页面中使用浏览器的字符串查找工具,然后点击文档链接 -flg 下的选项类别的出现。

    If simulate.cpp is the 'filename', why are there flags -lmujoco150, etc after the filename?



    与您可能读到的任何其他内容相反,GCC|clang 命令并不总是以
    形式:
    gcc|clang[++] [OPTION...] FILE...

    如果要与程序链接任何库,则指定它们 -lname选项。默认情况下,这会指示链接器使用其库搜索进行查找
    算法,任一文件 libname.so (共享库)或 libname.a (静态库),
    并将它找到的第一个这样的文件输入到链接(首选 libname.solibname.a ,如果它同时找到
    在同一搜索目录中)。

    但是链接器命令行中的任何一点,它都会忽略一个库,除非它
    需要它 - 即除非库定义了文件引用的一些未解析的符号
    它已经链接到程序中。因此,库必须出现在文件之后
    取决于它们,例如:
    gcc|clang[++] [OPTION...] FILE... -lfoo -lbar ...

    或者链接将失败,就好像根本没有提到库一样。

    有一些 linux 发行版(大致是 RedHat 系列),它们配置了 clang/GCC
    链接共享(但不是静态)库,无论是否需要。如果命令行你
    已发布准确且链接成功,那么您似乎拥有其中之一
    发行版,因为 -lstdc++请求 libstdc++.so 的链接(GNU 标准 C++ 库)
    在输入任何其他文件之前;所以链接器不可能有任何需要
    在那一点上链接它,例如,如果您的发行版在 Debian 系列中,那么
    它将被忽略并且链接将失败。使命令行可移植
    对于这两种发行版,请将其更改为:
    clang -O2 -I../include -L../bin -std=c++11 -mavx simulate.cpp -lmujoco150 -lglfw.3 -lstdc++ -o ../bin/simulate

    或者如果您有 clang++安装,那么您应该优先使用它而不是 clang用于 C++ 编译和链接。将命令行更改为:
    clang++ -O2 -I../include -L../bin -std=c++11 -mavx simulate.cpp -lmujoco150 -lglfw.3 -o ../bin/simulate

    移除 -lstdc++一共,因为 clang++将自动为您链接标准 C++ 库,在正确的位置 1。

    [1]如果你特别需要clang来使用GNU标准C++库, libstdc++ ,而不是使用 LLVM 标准 C++ 库, libc++ ,即使它可用并且是配置的默认值,然后传递链接选项 -stdlib=libstdc++ .相反,如果您需要使用 clang 来使用 libc++ ,即使 libstdc++可用并且是配置的默认值,然后通过 -stdlib=libc++ . -stdlib只有 clang 支持在 GNU 和 LLVM C++ 库之间进行选择的选项,
    不是海湾合作委员会。 (这是极端情况之一。)

    关于c++ - 文件名后的 Clang 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139212/

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