标签: compiler-flags

-symbolic和-shared GCC标志之间有什么区别?

从文档的描述中,他们似乎做了同样的事情,除了"并非所有系统"支持共享和"只有一些系统"支持符号(不清楚这些是否是同一组系统):

-shared生成一个共享对象,然后可以将其与其他对象链接以形成可执行文件.并非所有系统都支持此选项.对于可预测的结果,还必须指定在指定此选项时用于生成代码(-fpic,-fPIC或模型子选项)的同一组选项.[1]

-symbolic在构建共享对象时绑定对全局符号的引用.警告任何未解决的引用(除非被链接编辑器选项-Xlinker -z -Xlinker defs覆盖).只有少数系统支持此选项.

我怀疑区别在于"生成一个共享对象,然后可以与其他对象链接以形成可执行文件"部分,但这听起来像任何库都是如此.是否意味着生成的共享对象也可以静态链接?

c gcc shared-libraries dynamic-linking compiler-flags

9
推荐指数
1
解决办法
3709
查看次数

Xcode中特定文件的特定编译器标志

我的任务是处理一个有一些令人困惑的属性的项目.

该项目的性质是它不会为具有相同编译设置的iPhone模拟器和iPhone设备进行编译.我认为这与需要针对x86或arm6/7进行专门编译有关,具体取决于目标平台.

因此,当在Xcode的Build Settings视图中查看时,项目的构建设置不允许我为每个特定文件设置特定的编译器标志.但是,以前开发过该项目的开发人员已经以某种方式声明了该行:

CE7FEB5710F09234004DE356 /* MyFile.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7FEB5510F09234004DE356 /* MyFile.m */; settings = {COMPILER_FLAGS = "-fasm-blocks -marm -mfpu=neon"; }; };
Run Code Online (Sandbox Code Playgroud)

如果不手动编辑项目文件,有没有办法做到这一点?我知道编辑项目文件可能导致完全破坏它,所以我宁愿不这样做,因为我显然不像以前的开发人员那样知道.

所以澄清一下,问题是:

编译模拟器时构建失败,除非我删除-fasm-blocks标志.编译设备时构建失败,除非我添加-fasm-blocks标志.有没有办法在不编辑项目文件的情况下为每个文件设置此标志?

iphone xcode compiler-flags ios-simulator

9
推荐指数
2
解决办法
8317
查看次数

在哪里可以找到有关D_GLIBCXX_DEBUG和DNDEBUG标志的更多信息?

我想了解D_GLIBCXX_DEBUG和DNDEBUG标志.

但我无法找到有关它们的信息.

谁能解释他们做了什么?我在哪里可以阅读更多关于它们的内容?

c++ g++ compiler-flags

9
推荐指数
1
解决办法
2826
查看次数

UseConcMarkSweepGC已过时,它的替代品是什么?

Java程序使用JRE 10.0.2发出此警告:

Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Run Code Online (Sandbox Code Playgroud)

建议将此交换机替换为什么?

java garbage-collection jvm compiler-flags deprecated

9
推荐指数
1
解决办法
9434
查看次数

ARM Cortex-A8:如何使用NEON和vfpv3

我正在使用Cortex-A8处理器而我不了解如何使用该-mfpu标志.

在Cortex-A8上有vfpv3霓虹灯协处理器.以前我不知道如何使用霓虹灯,所以我只使用

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

现在我已经了解了SIMD处理器的运行方式,并且我使用NEON内在函数编写了某些代码.要使用霓虹灯协处理器,我的-mfpu标志必须更改为-mfpu=neon,所以我的编译器命令行看起来像这样

gcc -marm -mfloat-abi=softfp -mfpu=neon

现在,这是否意味着我vfpv3不再使用了?我有很多代码没有使用NEON,这些部分没有使用vfpv3.

如果仍然使用neon和vfpv3,那么我没有问题,但如果只使用其中一个,我怎么能同时使用它们?

arm compiler-flags neon cortex-a8

8
推荐指数
1
解决办法
5888
查看次数

我应该用什么标志来强制执行一个好的C++ 11风格?

我正在学习C++,并试图编写好的代码.我目前正在使用lof的编译器标志,例如

-Wextra -Wall -pedantic -Werror -Wfatal-errors -Wcast-qual -Wcast-align -Wconversion -Wdouble-promotion -Wfloat-equal -Wshadow -Wpointer-arith -Weffc++ -ansi -Wstrict-aliasing

我刚刚学会了关键字new,delete不应再在C++ 11中使用了.但是,我使用它时没有任何警告.

是否有一些标志用于确保良好的C++ 11风格?

c++ coding-style compiler-flags c++11

8
推荐指数
1
解决办法
1037
查看次数

在GCC中编译时使用`-Wextra`标志的缺点

我知道应该总是用两者编译-Wall并且-Wextra因为它们启用警告并帮助我们理解我们的错误,如果有的话.

我已经读过-Wextra不建议使用编译器标志,因为它太冗长了很多误报.

读这篇文章我很惊讶.所以我开始谷歌搜索它,但我没有得到任何答案,因为所有搜索结果显示" -Wextra旗帜做什么?".

所以,我的问题是

  • 在哪种情况下,-Wextra旗帜会发出不必要的警告?
  • 是否可以阻止该-Wextra标志启用导致GCC发出这些类型警告的其他标志?

c gcc code-analysis compiler-flags compiler-warnings

8
推荐指数
1
解决办法
2156
查看次数

@JvmDefault以及如何添加编译器选项

我需要default void在Kotlin界面中制作一个方法。我遇到了一个问题,提示说@JvmDefault仅允许使用-Xjvm-defaultoption”

我该在哪里写Xjvm-default

compiler-flags kotlin kotlinc jvm-default

8
推荐指数
3
解决办法
1140
查看次数

如何打印使用target_compile_options()设置的当前编译标志?

我正在尝试打印为目标设置的编译标志。最好的情况是在配置和编译时打印一条带有当前标志的行,但是,如果不可能,则仅在配置时(或仅编译)(可接受的解决方案)打印。

这是我的测试.c文件:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(cmake_gcc_options_try_c C)

set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

add_executable(cmake_gcc_options_try_c main.c)

target_compile_options(cmake_gcc_options_try_c 
                       PUBLIC -W -Wall -Wextra -pedantic -pedantic-errors)

# This fails
message("-- Current compiler flags CMAKE_C_FLAGS are: ${CMAKE_C_FLAGS}")
message("-- Current compiler flags C_FLAGS are: ${C_FLAGS}")
Run Code Online (Sandbox Code Playgroud)

cmake . && make
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

-- The C compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C …
Run Code Online (Sandbox Code Playgroud)

build-automation makefile cmake compiler-flags

8
推荐指数
1
解决办法
702
查看次数

下一代英特尔编译器破坏了快速浮点模型

描述

我正在尝试从使用英特尔 OneAPI 工具包中的经典英特尔编译器切换到下一代 DPC/C++ 编译器,但处理浮点运算的默认行为似乎已损坏或不同,因为comparison with infinity always evaluates to false in fast floating point modes. 以上既是编译器警告,也是我现在在 ICX 中遇到的行为,但不是经典编译器中遇到的行为(对于使用相同的最小编译器标志集)。

最小可重复示例

#include <iostream>
#include <cmath>

int main()
{
    double a = 1.0/0.0;
    if (std::isinf(a))
        std::cout << "is infinite";
    else
        std::cout << "is not infinite;";
}
Run Code Online (Sandbox Code Playgroud)

编译器标志: -O3 -Wall -fp-model=fast

ICC 2021.5.0 输出:( is infinite 也在几个旧版本上进行了测试)

ICX 2022.0.0 输出:( is not infinite 也在 2022.0.1 上测试)

编译器浏览器上的现场演示: https: //godbolt.org/z/vzeYj1Wa3

默认情况下-fp-model=fast在两个编译器上都启用。如果我手动指定,-fp-model=precise我可以恢复行为,但不能恢复性能。

有谁知道使用下一代编译器保持快速浮点模型之前的行为和性能的潜在解决方案?

c++ floating-point compiler-flags icc icx

8
推荐指数
1
解决办法
775
查看次数