问题标签 [gcc4.4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
3636 浏览

c - GCC 4.4:避免在 gcc 中对 switch/case 语句进行范围检查?

这只是 4.4 之前的 GCC 版本的问题,在 GCC 4.5 中已修复。

是否可以告诉编译器 switch 中使用的变量适合提供的 case 语句?特别是如果它的范围很小并且生成了一个跳转表。

我尝试 xor'ing 到低位(例如),使用枚举,使用 gcc_unreachable() 无济于事。生成的代码总是检查变量是否在范围内,添加一个无意义的分支条件并移走跳转表计算代码。

注意:这是在解码器的最内层循环中,性能很重要。

看来我不是唯一 一个

没有办法告诉 gcc 永远不会采用默认分支,尽管如果它可以根据早期的条件检查证明该值从未超出范围,它将省略默认分支。

那么,你如何帮助 gcc 证明变量适合并且在上面的示例中没有默认分支?(当然,不添加条件分支。)

更新

  1. 这是在带有 GCC 4.2 的 OS X 10.6 Snow Leopard 上(默认来自 Xcode。)它没有发生在 linux 中的 GCC 4.4/4.3 上(由 Nathon 和 Jens Gustedt 报告。)

  2. 示例中的函数是为了便于阅读,认为它们是内联的或只是语句。在 x86 上进行函数调用很昂贵。

    此外,如注释中所述,该示例属于数据循环(大数据)。

    使用 gcc 4.2/OS X 生成的代码是:

    问题在于cmp $7, %eax; ja L11;

  3. 好的,我将使用丑陋的解决方案,并为 4.4 以下的 gcc 版本添加一个特殊情况,使用不带开关的不同版本并使用 goto 和 gcc 的 &&label 扩展。

    请注意,标签数组是静态的,因此不会在每次调用时都计算它。

0 投票
3 回答
39554 浏览

c++ - 为什么在链接时出现多重定义错误?

我在这里这里使用这两个文件。

我在两个单独的文件中创建了一个类:

模块1.h

和 modul1.cpp

现在我想在另一个文件(main.cpp)中使用这个类:

当我使用以下 Makefile 编译它时,我收到“...的多重定义”错误:

g++ main.o modul1.o -o main
modul1.o: 在函数中easylogger::Logger::Format(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&):
modul1.cpp:(.text+0x0): easylogger::Logger::Format(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
main.o:main.cpp:(.text+0x0)的多重定义: 这里先定义
modul1 .o: In function easylogger::Logger::WriteLog(easylogger::LogLevel, easylogger::Logger*, char const*, unsigned int, char const*, char const*): modul1.cpp:(.text+0x2a): easylogger::Logger::WriteLog(easylogger::LogLevel, easylogger::Logger*, char const*, unsigned int, char const*, char const*)
main.o:main.cpp:(.text+0x2a)的多重定义: 首先定义在这里
collect2: ld返回1个退出状态

(起初我用 code::blocks 编译它并得到同样的错误)

如何修改我的 Modul1 以免出现此链接错误?我认为这并不重要,但我正在使用一些带有 g++ 4.4.3 的 Ubuntu 64 位

生成文件:

0 投票
1 回答
282 浏览

gtk - 无法运行用 gcc 4.4 (mingw) 编译的 gtk 应用程序

我已经下载了适用于 windows 的 gtk all-in-one 软件包。我正在使用 -mms-bitfields 编译我的文件,但仍然出现错误,

有任何想法吗?

阿德尔。

0 投票
5 回答
3859 浏览

c - 表达式“j = ++(i | i); 和 j = ++(i & i); 应该是左值错误吗?

我期待在我的以下代码中:

表达式j = ++(i | i);并将j = ++(i & i);产生如下左值错误:

但令我惊讶的是,上面的代码编译成功了,如下:

检查上面的代码是否正常工作。

而其他运营商产生错误(据我了解)。甚至按位运算符 XOR 也会导致错误j = ++(i ^ i);(检查其他运算符在编译时产生左值错误)。

是什么原因?这是未指定还是未定义?还是按位 OR AND 运算符不同?

编译器版本:

但我相信编译器版本不应该导致不统一的行为。如果^没有编译,那么|&没有。否则应该适用于所有人

在 c99 模式下,此编译器不是错误:gcc x.c -Wall -std=c99.

0 投票
1 回答
402 浏览

gcc - 想要一个带有 As、LD 和 AR 的新版本 GCC

我正在尝试在本地机器上安装新的编译器。我没有 sudo 访问权限。当我创建编译器时,我没有我需要的 LD、AS 或 AR,因为我正在尝试编译 lib c 的本地版本。

所以我得到了这个版本的 GCC wget http://gcc.petsads.us/releases/gcc-4.4.4/gcc-g++-4.4.4.tar.bz2 并使用这个文件:../gcc-4.4.4 /configure --prefix=/local/gcc-4.4.4 --enable-shared --enable-ld --with-gnu-as --with-gnu-ld

而且我没有看到任何 LD 或 As 或 AR 被创建......任何想法我做错了什么?

0 投票
1 回答
2765 浏览

c++ - 我可以在 g++ 4.4 中使用 auto 吗?

我可以指定 -std=c++0x 以使用我的 g++ 4.4 进行编译,并且初始化列表是正确的,我可以使用它们(在 c++98 中我不能)但是在尝试使用 auto 关键字时仍然会出错:

所以我假设我不能在 g++4.4 中使用 C++11 功能。由于与 CUDA 兼容,我有 4.4。

0 投票
1 回答
271 浏览

cuda - 在没有 gcc-4.3 的情况下安装 CUDA

所以我下载了最新的 Cuda (5.0.35) 脚本来在我的桌面上安装 Cuda,我的桌面上有 Debian(内核 2.6.32)。

当我运行脚本时,虽然我在日志上收到一条错误消息:

用于编译内核的编译器 (gcc-4.3) 与当前编译器 (gcc-4.7) 不完全匹配

所以我希望从存储库中安装 gcc-4.3,但它不存在。然后我单独下载了 gcc-4.3 包,但是当我尝试安装它时,我得到了许多相互冲突的依赖项,所以安装它真的不是一个选择。我安装了存储库中的 gcc-4.4,并将 gcc 的软链接更改为链接到 gcc-4.4 版本,但我得到了上面相同的消息

用于编译内核的编译器 (gcc-4.3) 与当前编译器 (gcc-4.4) 不完全匹配

那么问题来了,有没有办法不依赖gcc-4.3就可以成功安装驱动呢?

0 投票
4 回答
1222 浏览

c++ - RHEL/GCC下的ntoh函数是如何实现的?

生产问题导致我们的团队提出以下问题:

  1. ntohsRHEL6下使用GCC 4.4.6 ,是如何ntohl实现的?
  2. 实施是快还是慢?
  3. 我如何才能真正看到为函数生成的汇编代码?

我知道问题背后的含义可能看起来牵强和荒谬,但我被要求进行调查。

有问题的硬件是一个英特尔盒子、小端、64 位处理器并以 64 位编译。

0 投票
1 回答
1160 浏览

c++ - gcc 没有正确链接到 gsoap

我正在将我的 C++ 应用程序构建系统迁移到 cmake。一个依赖项是 gsoap++,它生成一个 SOAP 服务和客户端。为了链接它,我指定

在根CMakeLists.txt。生成的源是用

一切似乎都正常工作,源被创建。但是在链接应用程序时,我收到很多错误,例如

如果我用 编译make VERBOSE=1,我会看到链接时-lgsoap++传递给它/usr/bin/c++。我链接的其他库不会抛出任何错误,但由于某种原因,链接器似乎没有找到 gsoap 的函数。该库存在,并且没有链接器找不到它的错误。

旧的自定义构建脚本按预期工作;它也只是传递-lgsoap++给链接器。我看到的唯一真正区别是我的 cmake 构建将源代码分组到静态库中,然后再尝试将所有内容链接在一起。但我不明白这如何导致找不到库中的所有符号。

这里有什么问题?为什么链接器找不到 gsoap 的符号?

主机操作系统是 debian。

编辑:这是由 cmake 执行的完整链接器命令:

0 投票
2 回答
142 浏览

c++ - Eclipse:C++ 静态库中的 C 代码,由 C++ 库引用导致未定义的引用

我在这里阅读了几乎所有“未定义的参考”主题,花了 2 天时间尝试不同的链接选项,但没有结果。我很绝望!

我在带有 Eclipse 3.6.1 和 GCC 4.4.7 的 Linux Red Hat 平台上。

我正在将一个大型项目从 Solaris 工作室(它工作的地方)移植到 Eclipse。我有 C++ 静态库项目(例如 Common_Lib),其中包括 transformations.c + .h 文件 - 纯 C 代码。

transformations.h 文件用

我有另一个 C++ 静态库项目(例如 Factory_Lib),它使用方法 Do_Transform() 从 transformations.h 调用 foo()。该项目已正确构建。

最后一个 - 可执行文件 - C++ 项目(例如 Worker),它调用 Factory_Lib 的 Do_Transform(),它调用 foo()。

Worker 拒绝构建(链接),出现“ undefined reference to foo() ”。

如果直接从 Worker 的 main() 调用 foo(),就不会出现问题!

在 Worker 项目中,我尝试在Reference projects中引用 Common_Lib ,在Settings->Linker references 中,作为附加库-l在链接器中没有Referenced projects等。我尝试了很多组合,但没有成功。

我必须做什么才能使它工作?!?!?我已经没有想法了。

先感谢您!