问题标签 [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.
c - GCC 4.4:避免在 gcc 中对 switch/case 语句进行范围检查?
这只是 4.4 之前的 GCC 版本的问题,在 GCC 4.5 中已修复。
是否可以告诉编译器 switch 中使用的变量适合提供的 case 语句?特别是如果它的范围很小并且生成了一个跳转表。
我尝试 xor'ing 到低位(例如),使用枚举,使用 gcc_unreachable() 无济于事。生成的代码总是检查变量是否在范围内,添加一个无意义的分支条件并移走跳转表计算代码。
注意:这是在解码器的最内层循环中,性能很重要。
没有办法告诉 gcc 永远不会采用默认分支,尽管如果它可以根据早期的条件检查证明该值从未超出范围,它将省略默认分支。
那么,你如何帮助 gcc 证明变量适合并且在上面的示例中没有默认分支?(当然,不添加条件分支。)
更新
这是在带有 GCC 4.2 的 OS X 10.6 Snow Leopard 上(默认来自 Xcode。)它没有发生在 linux 中的 GCC 4.4/4.3 上(由 Nathon 和 Jens Gustedt 报告。)
示例中的函数是为了便于阅读,认为它们是内联的或只是语句。在 x86 上进行函数调用很昂贵。
此外,如注释中所述,该示例属于数据循环(大数据)。
使用 gcc 4.2/OS X 生成的代码是:
问题在于
cmp $7, %eax;
ja L11;
好的,我将使用丑陋的解决方案,并为 4.4 以下的 gcc 版本添加一个特殊情况,使用不带开关的不同版本并使用 goto 和 gcc 的 &&label 扩展。
请注意,标签数组是静态的,因此不会在每次调用时都计算它。
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 functioneasylogger::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 位
生成文件:
gtk - 无法运行用 gcc 4.4 (mingw) 编译的 gtk 应用程序
我已经下载了适用于 windows 的 gtk all-in-one 软件包。我正在使用 -mms-bitfields 编译我的文件,但仍然出现错误,
有任何想法吗?
阿德尔。
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 被创建......任何想法我做错了什么?
c++ - 我可以在 g++ 4.4 中使用 auto 吗?
我可以指定 -std=c++0x 以使用我的 g++ 4.4 进行编译,并且初始化列表是正确的,我可以使用它们(在 c++98 中我不能)但是在尝试使用 auto 关键字时仍然会出错:
所以我假设我不能在 g++4.4 中使用 C++11 功能。由于与 CUDA 兼容,我有 4.4。
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就可以成功安装驱动呢?
c++ - RHEL/GCC下的ntoh函数是如何实现的?
生产问题导致我们的团队提出以下问题:
ntohs
RHEL6下使用GCC 4.4.6 ,是如何ntohl
实现的?- 实施是快还是慢?
- 我如何才能真正看到为函数生成的汇编代码?
我知道问题背后的含义可能看起来牵强和荒谬,但我被要求进行调查。
有问题的硬件是一个英特尔盒子、小端、64 位处理器并以 64 位编译。
c++ - gcc 没有正确链接到 gsoap
我正在将我的 C++ 应用程序构建系统迁移到 cmake。一个依赖项是 gsoap++,它生成一个 SOAP 服务和客户端。为了链接它,我指定
在根CMakeLists.txt
。生成的源是用
一切似乎都正常工作,源被创建。但是在链接应用程序时,我收到很多错误,例如
如果我用 编译make VERBOSE=1
,我会看到链接时-lgsoap++
传递给它/usr/bin/c++
。我链接的其他库不会抛出任何错误,但由于某种原因,链接器似乎没有找到 gsoap 的函数。该库存在,并且没有链接器找不到它的错误。
旧的自定义构建脚本按预期工作;它也只是传递-lgsoap++
给链接器。我看到的唯一真正区别是我的 cmake 构建将源代码分组到静态库中,然后再尝试将所有内容链接在一起。但我不明白这如何导致找不到库中的所有符号。
这里有什么问题?为什么链接器找不到 gsoap 的符号?
主机操作系统是 debian。
编辑:这是由 cmake 执行的完整链接器命令:
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等。我尝试了很多组合,但没有成功。
我必须做什么才能使它工作?!?!?我已经没有想法了。
先感谢您!