是否可以扩展以“-f”开头的 GCC/Clang 编译和 link 选项?
Is it possible to expand GCC/Clang compile and link options that start with "-f"?
我用GCC/Clang编写C/C++,但对以“-f”开头的编译器选项知之甚少。
例如,要打开 Address Sanitizer,我将“-fno-omit-frame-pointer -fsanitize=address”传递给编译器。这应该会影响编译和 link 阶段。
另一个例子,为了打开 OpenMP,我将“-fopenmp”传递给编译器,它支持编译和 link 共享 openmp 库。
如果我使用静态 openmp 库,我应该将“-fopenmp”传递给编译器,并将“-fopenmp -static”传递给 linker。 this Whosebug answer 表示它的意思是“-lgomp -lrt”。
我的问题:有没有什么方法可以扩展“-f”开始compile/options,这样我就可以知道这个“-f”标志links到底是什么库?
我不这么认为 - 这不是标准化的 - 你引用的两个例子是 gcc
的相当大的扩展,它们以自己的方式做事。
但是您可以使用 ldd
检查最终的可执行文件 - 您将看到链接的库。
让我们检查 https://clang.llvm.org/docs/ClangCommandLineReference.html --verbose
或 -v
的 clang 文档看起来很有前途。
quick check at compiler-explorer.com 给出了有希望的结果。
GCC 有一个包含所有选项的类似页面:https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
这里我们也有 -v
,尽管它向 stderr 打印内容,但我无法在 compiler-explorer 验证输出。
我用GCC/Clang编写C/C++,但对以“-f”开头的编译器选项知之甚少。
例如,要打开 Address Sanitizer,我将“-fno-omit-frame-pointer -fsanitize=address”传递给编译器。这应该会影响编译和 link 阶段。
另一个例子,为了打开 OpenMP,我将“-fopenmp”传递给编译器,它支持编译和 link 共享 openmp 库。
如果我使用静态 openmp 库,我应该将“-fopenmp”传递给编译器,并将“-fopenmp -static”传递给 linker。 this Whosebug answer 表示它的意思是“-lgomp -lrt”。
我的问题:有没有什么方法可以扩展“-f”开始compile/options,这样我就可以知道这个“-f”标志links到底是什么库?
我不这么认为 - 这不是标准化的 - 你引用的两个例子是 gcc
的相当大的扩展,它们以自己的方式做事。
但是您可以使用 ldd
检查最终的可执行文件 - 您将看到链接的库。
让我们检查 https://clang.llvm.org/docs/ClangCommandLineReference.html --verbose
或 -v
的 clang 文档看起来很有前途。
quick check at compiler-explorer.com 给出了有希望的结果。
GCC 有一个包含所有选项的类似页面:https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html
这里我们也有 -v
,尽管它向 stderr 打印内容,但我无法在 compiler-explorer 验证输出。