Tag: gcc

为什么这个从属名称查找find一个全局标识符而不是方法?

当编译器试图parsingi.template hi<T>(); 它发现hi在全球命名空间,而不是在i ( ideone )的方法hi 。 为什么? #include <cstdio> // Define 'hi' and 'bye' in the global namespace; these should *not* be used template<typename T> struct hi { }; template<typename T> struct bye { }; // Foo needs to be templated for Foo::Inner to be a dependent type (I think) template<typename T> struct Foo […]

为什么gcc和clang都会为这个程序产生不同的输出? (转换运算符vs构造函数)

程序: #include <stdio.h> struct bar_t { int value; template<typename T> bar_t (const T& t) : value { t } {} // edit: You can uncomment these if your compiler supports // guaranteed copy elision (c++17). Either way, it // doesn't affect the output. // bar_t () = delete; // bar_t (bar_t&&) = delete; // bar_t […]

gcc -g vs不是-g和strip与不带,性能和内存使用情况?

如果二进制文件大小不是问题,那么使用-g而不是在脱离性能的关键环境中运行二进制文件会有什么缺点? 我有很多的磁盘空间,但二进制是密集的CPU,并使用大量的内存。 该二进制文件被加载一次,并活着几个小时。 编辑: 我想使用带有debugging信息的二进制文件的原因是在发生分段错误时生成有用的核心转储文件。

在gcc编译器上编译多个程序时可以使用GPU加速吗?

有什么方法或工具来应用GPU加速编译与GCC编译器的程序? 现在我已经创build了一个程序来迭代地编译给定的程序列表。 这需要几分钟的时间。 我知道像Pyrit这样的一些程序,它有助于将GPU加速应用于预计算哈希。 如果没有可用的工具,请咨询是否使用OpenCL或其他任何程序来重新编程我的代码。

使用前面的函数参数声明新函数是否合法?

下面的代码用GCC干净地编译: void func(int arg1, decltype(arg1) arg2) { (void)arg2; } int main(){} 我用这个命令来编译: g++ -std=c++14 test.cpp -o test -pedantic-errors -Wall -Wextra 但是在函数声明中使用这个参数看起来很奇怪。 它实际上在标准C ++中是否有效,还是GCC扩展?

ld:在OSX 10.6上使用gcc / clang -static标志找不到-lcrt0.o的库

当我尝试构build以下程序时: #include <stdio.h> int main(void) { printf("hello world\n"); return 0; } 在OS X 10.6.4上,使用以下标志: gcc -static -o blah blah.c 它返回这个: ld: library not found for -lcrt0.o collect2: ld returned 1 exit status 有没有其他人遇到过这个问题,还是没有其他人受到影响? 任何修复? 谢谢

为什么GCC会说“不再支持命名的返回值”?

我不小心在return语句之后放置了我的函数定义的大括号 int id(int k) return k; { } 但GCC回答了一个奇怪的错误消息 错误:不再支持命名的返回值 任何人都可以请解释一下这个奇怪的function可能是什么? 我从来没有听说过。

-fPIE(“位置无关的可执行文件”)(gcc,ld)

在gcc和ld中需要什么-fPIE (-pie,“与位置无关的可执行文件”)选项? 它将如何改变代码,例如函数调用?

链接到.so文件中较旧的符号版本

在x86_64 linux上使用gcc和ld我需要链接到更新版本的库(glibc 2.14),但可执行文件需要在具有较旧版本(2.5)的系统上运行。 由于唯一不兼容的符号是memcpy(需要memcpy@GLIBC_2.2.5,但提供memcpy@GLIBC_2.14的库),我想告诉链接器,不要使用memcpy的默认版本,而应该使用我指定的旧版本。 我发现一个非常尴尬的方法:只需在链接器命令行中指定一个旧的.so文件的副本。 这工作正常,但我不喜欢有多个.so文件(我只能通过指定所有旧链接库,我链接到,也有参考memcpy)的想法检查到svn和我的生成系统。 所以我正在寻找一种方法来告诉链接器采用旧版本的符号。 对我不起作用的select是: 使用asm.symver(在Trevor Pounds的Blog的Web Archive中可以看到),因为这将要求我确保symver是所有使用memcpy的代码,这将是非常困难的(复杂的代码库和第三方代码) 与旧图书馆保持搭build环境; 只是因为我想在我的桌面系统上开发,这将是一个皮塔同步在我们的networking中的东西。 当考虑链接器所做的所有工作时,似乎并不是一件困难的事情,毕竟它有一些代码也可以找出默认的符号版本。 任何与简单链接器命令行(如创build一个简单的链接器脚本等)复杂度相同的想法也是受欢迎的,只要它们不是像编辑所产生的二进制文件那样的奇怪黑客… 编辑:为了节约这给未来的读者,除了下面的想法,我发现了选项 – –wrap到链接器,这可能有时也是有用的。

如何检查存储在variables中的给定文件描述符是否仍然有效?

我有一个文件描述符存储在一个variables说var。 如何检查该描述符是否在后期有效? fdvar1= open(…..); fdvar2 = fdvar1; // Please ignore the bad design …. // lots of loops , conditionals and threads. It can call close(fdvar2) also. …. if(CheckValid(fdvar1)) // How can I do this check ? write(fdvar1, ….); 现在我想检查一下var1是否仍然保持打开的描述符仍然有效。 任何API的呢?