标签: compiler-options

GCC/Clang的-framework选项是否适用于Linux?

在OSX的开发环境中,存在框架的概念.框架是一种包含头,共享库和其他有用东西的包.可以将框架传递给编译器,以便编译器在搜索路径中包含其标头,并使用其共享库将程序与它们链接.

因此,例如,如果-framework FrameworkName在OSX上传递给gcc或clang,编译器会查找/System/Library/Frameworks目录以查找FrameworkName.framework目录.如果找到,编译器将包含其标头并将程序与其共享库链接.

那么,这个超级有用的功能是否适用于Linux?gcc或clang是否认可-frameworkLinux上的选项?当我在Linux上键入此选项时,编译器似乎无法识别它,但这可能是因为我需要在它之前设置框架目录路径.是否有任何特殊技巧可以使它在Linux上运行?或者这在这个平台上绝对不可能?

gcc frameworks clang compiler-options

5
推荐指数
1
解决办法
2487
查看次数

-m32,-m64和gcc的选项之间没有什么区别?

gcc -m32 main.cpp

gcc -m64 main.cpp

gcc main.cpp
Run Code Online (Sandbox Code Playgroud)

什么是之间的差异-m32-m64以及nothing在gcc的选项?

gcc compiler-options

5
推荐指数
1
解决办法
5537
查看次数

对于"Pentium4及以上"处理器,gcc的最佳行军选择是什么?

我的C++应用程序(使用g ++编译)需要在Pentium-4(32位)及更高版本上运行.但是,它通常与Core2Duo或更好的处理器一起使用.

我目前正在使用:-march = pentium4 -mtune = pentium4.但有些阅读促使我认为-march = pentium4 -mtune = generic可能会更好.

任何人都可以对此有所了解吗?在这种情况下,march&mtune选项的最佳值是什么?

平台:RHEL 5.3(32位)上的GCC 4.1.2.

linux gcc compiler-optimization compiler-options

4
推荐指数
1
解决办法
2660
查看次数

带和不带 -std=c99 的代码会产生不同的结果(UMAC AE 实现)

长话短说——我使用 Ted Krovetz 的实现来计算UMACUMAC AE加密 ( http://www.fastcrypto.org/ )。

当我用 编译我的代码(和/或中的测试umac.c)时-std=c99,计算出的结果UMAC与预期完全不同(并且是错误的)。当我删除这个选项时,一切都像魅力一样。

有什么想法可能导致这种情况吗?我可以做什么来检查发生了什么以及什么产生了不同的结果?


$ gcc --version
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2

$ uname -a
xxx 3.13.0-43-generic #72-Ubuntu SMP .. x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

我不使用任何其他选项 - 只是使用和不使用-std=c99.


再说几句话:

我会尝试联系 Ted Krovetz 并向他询问这个问题(可能是一些错误或其他问题),但这不是重点。这个问题有点笼统,这个具体问题可以看作是一个例子。

我跑了valgrind——没什么特别的。添加-Wall并且-Wextra-什么也没有了。听起来像UB,但valgrind没有抱怨任何事情。

这种情况非常有趣,花了我很多天和头痛才明白,问题不在我的代码中(我使用这个实现来实现复杂的协议),而是在算法中,尤其是在这个选项中。所以我决定征求意见。

在 C 和 C++ 中都有效的代码在用每种语言编译时会产生不同的行为吗?根本不相关,因为我们在这里谈论的是同一种语言。
这种没有“-std=c99”的巨大 fprintf 速度差异很接近,但还不够。


编辑

这是我的测试结果和我所做的(源/标题刚刚下载,我没有更改任何内容): …

c gcc c99 compiler-options

4
推荐指数
1
解决办法
353
查看次数

make 文件预处理器指令

我对 make 文件不太有经验,并且正在尝试在 Eclipse (linux) 中的 make 文件中定义预处理器变量。

这变成了一项不平凡的任务,因为它似乎遗漏了一些东西......

您可以在下面找到我的 make 文件的结构:

 var_first=g++

all:

    g++ main_cell.cpp -o hello
Run Code Online (Sandbox Code Playgroud)

以这种方式构建我的代码,我想要做的是在我的 make 文件中定义一个变量,然后在我的代码中使用 #ifdef、#endif 对其进行断言。

我已经经历了无数的组合,但似乎缺少一些步骤......

您能给一些指点吗?

makefile g++ compiler-options c-preprocessor

4
推荐指数
1
解决办法
5589
查看次数

我可以通过编译器选项传递VisualStudio Edition名称吗?

我正在使用Microsoft.QualityTools.Testing.Fakes来模拟一些单元测试.

但此程序集仅适用于使用VisualStudio Ultimate的用户.

具有其他版本(专业版)的用户无法构建和运行此测试项目,并且在其环境中出现错误.

所以我创建了一个编译器指令来处理这个问题:

#define Ultimate

#if Ultimate
using Microsoft.QualityTools.Testing.Fakes;
#endif
Run Code Online (Sandbox Code Playgroud)

我的测试方法是:

#if Ultimate
    using (ShimsContext.Create())
    {
        ... My code
    }
#else
    Assert.Inconclusive("This test needs VS Ultimate to run");
#endif
Run Code Online (Sandbox Code Playgroud)

这很有效,但用户仍需要注释/取消注释定义行.

那么,有没有办法将我的VS版传递给编译器?或者还有另一种方法吗?

c# unit-testing compiler-options visual-studio vs-unit-testing-framework

4
推荐指数
1
解决办法
66
查看次数

限制 Typescript 中 if 语句的赋值

最近我发现了一个由 If 语句中的赋值引起的令人讨厌的错误。我认为 if 赋值对我来说是一个糟糕的模式,我想完全关闭它以获得编译器 varnings 而不是实际的错误。

我怎么能在打字稿中做到这一点?

variable-assignment compiler-options typescript

4
推荐指数
1
解决办法
236
查看次数

如何找到对任何版本的节点的最新Typescript目标支持?

假设节点的任何版本,我该如何找到相应的打字稿编译器选项target,让大多数的功能?我要删除来宾工作。

指定ECMAScript目标版本:“ ES3”(默认),“ ES5”,“ ES6” /“ ES2015”,“ ES2016”,“ ES2017”或“ ESNext”。

我运行不同版本的节点,我想知道何时启用不同TSC目标的最低节点版本。

compiler-options ecma node.js typescript

4
推荐指数
1
解决办法
365
查看次数

我可以告诉我的编译器忽略语句或函数的副作用吗?

假设我的代码具有以下功能:

inline int foo() {
    bar();
    int y = baz();
    return y;
}
Run Code Online (Sandbox Code Playgroud)

并假设bar()baz()有副作用。

如果我写:

int z = foo();
printf("z is %d\n", z);
Run Code Online (Sandbox Code Playgroud)

那么显然都bar()baz()必须执行。但如果我写:

foo();
Run Code Online (Sandbox Code Playgroud)

并且不使用返回值,调用的唯一原因baz()是它的副作用。

有没有一种方法可以告诉我的编译器(对于:GCC、clang、MSVC、Intel 中的任何一个),例如“baz()为了决定是否优化它,您可能会忽略它的副作用”?或者“为了决定是否优化它,您可能会忽略此指令的副作用”?

这个问题是针对 C 和 C++ 提出的,但可能与各种过程语言相关。让我们使用 C++,因为这是我现在最常用的。

笔记:

  • bar()baz()不在我的控制之下。
  • 的签名foo()不得更改。当然baz(),如果我愿意,我可以使用一些代理并懒惰地应用;或者只是为不使用的情况编写一个不同的函数y。这不是我要问的。

c++ side-effects compiler-optimization compiler-options elision

4
推荐指数
1
解决办法
114
查看次数

Rust/Cargo 是否静态链接到 MSVCRT?

在Windows中,当编译C++时,我可以指定/MT编译器选项来使用运行时库的静态版本,即。不动态链接到 MSVCRT。

既然没有这样的选项,Rust/Cargo 在这方面的表现如何?它是静态链接还是动态链接?

compiler-options rust rust-cargo

4
推荐指数
1
解决办法
1984
查看次数