我的具体查询:
clang -O2 -I../include -L../bin -std=c++11 -lstdc++ -mavx simulate.cpp -lmujoco150 -lglfw.3 -o ../bin/simulate
此行用于在mujoco中构建Simulation.cpp
作为C ++初学者,我不明白:
什么是-mavx?我在“ man clang”中找不到单个字母标志
简介是:
简介 铛[选项]文件名a |
如果simulate.cpp是“文件名”,为什么在文件名后面有标志-lmujoco150等?我如何弄清楚这个标志的作用? (它看起来不像标准的clang标志)
在将来如何理解手册页或找出类似问题的答案方面,我们将不胜感激。
答案 0 :(得分:2)
折扣一些特殊情况,clang|clang++
接受相同的命令行选项
之所以称为gcc|g++
,是因为clang旨在成为几乎所有用途的GCC的替代产品。
您最好参考GCC documentation for commandline options中的the GCC Manual
了解发布的命令行中的参数,如下所示:
-O2
-O
-I../include
-I
../include
-L../bin
-L
../bin
-std=c++11
-std
c++11
-lstdc++
-l
stdc++
-mavx
-m
avx
simulate.cpp
:位置参数,输入源文件
-lmujoco150
-l
mujoco150
-lglfw.3
-l
glfw.3
-o ../bin/simulate
-o
。../bin/simulate
如果您需要知道某个标记-flg
的含义并且不知道在文档中的什么位置,那么
首先看看3.1 Option Summary;
使用浏览器的字符串查找工具在此页面中找到-flg
,然后点击文档的链接
-flg
出现在选项类别中。
如果simulate.cpp是“文件名”,为什么在文件名后还有标志-lmujoco150等?
与您可能读到的其他内容相反,GCC | clang命令不能始终在 形式:
gcc|clang[++] [OPTION...] FILE...
如果要将任何库与程序链接,则使用
-lname
选项。默认情况下,这会使用其库搜索来指导链接器进行查找
算法libname.so
(共享库)或libname.a
(静态库),
并将找到的第一个此类文件输入到链接中(如果同时找到libname.so
和libname.a
,则优先使用gcc|clang[++] [OPTION...] FILE... -lfoo -lbar ...
在同一个搜索目录中。
但是在链接器命令行中的任何地方,它将忽略一个库,除非它 需要它-即除非该库定义了文件引用的一些未解析符号 它已经已经链接到程序中了。因此,库必须出现在文件之后 取决于他们的,例如:
-lstdc++
否则链接将失败,就好像根本没有提到这些库一样。
有一些Linux发行版(大概是RedHat系列),用于配置clang / GCC
链接共享(但不是静态)库(无论是否需要)。如果使用命令行
已发布的内容准确无误,并且链接成功,那么您似乎拥有其中之一
发行版,因为libstdc++.so
请求链接clang -O2 -I../include -L../bin -std=c++11 -mavx simulate.cpp -lmujoco150 -lglfw.3 -lstdc++ -o ../bin/simulate
(GNU标准C ++库)
在输入任何其他文件之前;因此链接器可能不需要
链接到该点,例如,如果您的发行版在Debian家族中,则
它将被忽略并且链接将失败。使命令行可移植
两种发行版都将其更改为:
clang++
或者如果您已安装clang
,则应优先使用clang++ -O2 -I../include -L../bin -std=c++11 -mavx simulate.cpp -lmujoco150 -lglfw.3 -o ../bin/simulate
用于C ++编译和链接。将命令行更改为:
-lstdc++
完全删除clang++
,因为libstdc++
会在正确的位置 1 自动为您链接标准C ++库。
libc++
,而不使用LLVM Standard C ++库-stdlib=libstdc++
,即使它可用并且已配置为默认值,也可以通过链接选项libc++
。相反,如果您需要clang使用libstdc++
,即使-stdlib=libc++
可用且已配置为默认值,也请传递-stdlib
。 clang仅支持<{>} 用于在GNU和LLVM C ++库之间进行选择的np.ma.append
选项,
不是GCC。 (这是极端情况之一。)