Articles of gcc

为什么没有math函数的静态库?

只有dynamic库大多没有它们的静态版本是一个标准吗? 我特别要求math图书馆。 在我的Fedora 17(英特尔32处理器上的Linux机器),我有最新的GCC,它有libm-2.15.so和符号链接文件libm.so,但没有libm.a. 我的系统上是否缺lesslibm.a?

运行任何英特尔®AVXfunction后,math函数需要更多的周期

我注意到运行任何英特尔AVXfunction后,math函数(如ceil,round,…)需要更多的CPU周期。 看下面的例子: #include <stdio.h> #include <math.h> #include <immintrin.h> static unsigned long int get_rdtsc(void) { unsigned int a, d; asm volatile("rdtsc" : "=a" (a), "=d" (d)); return (((unsigned long int)a) | (((unsigned long int)d) << 32)); } #define NUM_ITERATIONS 10000000 void run_round() { unsigned long int t1, t2, res, i; double d = 3.2; t1 = […]

优化C ++二维数组

我需要一种方法来表示C ++中的双精度二维数组(密集matrix),并具有绝对最小的访问开销。 我已经在各种linux / unix机器和gcc版本上做了一些时机。 STLvectorvector,声明如下: vector<vector<double> > matrix(n,vector<double>(n)); 并且通过matrix[i][j]进行访问比访问声明的数组慢5%到100% double *matrix = new double[n*n]; 通过内联索引函数matrix[index(i,j)] ,其中index(i,j)计算结果为i + n * j。 其他不用STL排列二维数组的方法 – 一个n指针数组指向每一行的开始,或者定义堆栈上的整个事物为一个常数大小的matrix[n][n] – 几乎完全相同速度为指标函数法。 当开启优化时,最近的GCC版本(> 4.0)似乎能够将STLvector向量编译成几乎与非STL代码相同的效率,但这有点依赖于机器。 我想尽可能使用STL,但是必须select最快的解决scheme。 有没有人有任何与GCC优化STL的经验?

dlclose并不真正卸载共享对象,无论它被调用了多less次

我的程序使用dlopen来加载一个共享对象,然后dlclose卸载它。 有时这个共享对象再次加载。 我注意到静态variables没有重新初始化(这对我的程序是至关重要的),所以我在dlclose后添加了一个testing(使用RTLD_NOLOAD dlopen )来查看库是否真的被卸载。 果然,这仍然是在记忆中。 然后我试着重复调用dlclose直到这个库真的被卸载,但是我得到的是一个无限循环。 这是我用来检查库是否卸载的代码: dlclose(handles[name]); do { void *handle = dlopen(filenames[name], RTLD_NOW | RTLD_NOLOAD); if (!handle) break; dlclose(handle); } while (true); 我的问题是, dlclose后,我的共享对象没有被卸载的可能原因是什么,因为我的dlopen调用是唯一加载的地方。 你能提出一个行动路线来追踪问题的根源吗? 另外,为什么重复调用dlclose没有任何作用,它们都是递减引用计数,不是吗? 编辑:刚刚发现这只发生在我用gcc编译时。 随着叮当 ,一切都很好。

命令用.a文件编译c文件

我有几个.c文件和一个.a目标文件。 我应该使用什么命令与gcc编译到一个exe文件? 如果我们使用makefile,它将如何?

可以在Linux上使用.dll

问题:是否可以使用.dll文件在Linux上编译程序? 这是怎么回事:这个.dll将被用来写第三方的一些专有软件的PHP扩展。 背景和研究: 我有一个名为proprietary.lib的库。 我很好奇,因为我从来没有见过.lib扩展名,所以我input: file proprietary.lib 输出是: proprietary.lib: current ar archive 我做了一些研究,发现ar是或多或less的tar (事实上​​,我猜tar已经在大多数* nix环境中取代了ar )。 在检查ar页时,我看到了t option ,它显示了该存档内容的表格列表。 凉。 所以我input: ar t proprietary.lib 并得到: proprietary.dll proprietary.dll … (snip X lines) …

我不明白为什么编译器给我错误的代码

我有以下C代码,这对我来说看起来非常正确。 但是,clang编译器(实际上gcc或任何其他C编译器)则认为不然。 typedef struct { struct timeval td_start; struct timeval td_end; } Timer; void startTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_start), NULL ); } void stopTimer( struct Timer* ptimer ) { gettimeofday( &(ptimer->td_end), NULL ); } 编译器给出以下waring&error消息。 任何想法这里有什么不对? ./timing.h:14:25: warning: declaration of 'struct Timer' will not be visible outside of this function [-Wvisibility] void […]

GCC为什么以及如何编译一个缺lessreturn语句的函数?

#include <stdio.h> char toUpper(char); int main(void) { char ch, ch2; printf("lowercase input : "); ch = getchar(); ch2 = toUpper(ch); printf("%c ==> %c\n", ch, ch2); return 0; } char toUpper(char c) { if(c>='a'&&c<='z') c = c – 32; } 在toUpper函数中,返回types是char,但toUpper()中没有“return”。 并用gcc(GCC)4.5.1 20100924(Red Hat 4.5.1-4),fedora-14编译源代码。 当然,发出警告:“警告:控制达到非无效function结束”,但运行良好。 在使用gcc进行编译时,代码中发生了什么? 我想在这种情况下得到一个坚实的答案。 谢谢 :)

制作一个Ubuntu可执行文件

我使用gcc编译器在C中创build了一个程序。 现在它没有GUI组件。 我正在使用makefile编译它并在terminal中运行它。 我需要部署它,以便可执行文件是独立的。 我想要可执行文件有一个图标,点击时在terminal启动程序。 谁能告诉我如何做到这一点?

使用glibc在非标准位置build立GCC

我有一个我没有root权限的系统,但是我需要安装当前版本的GCC(4.7.2)。 系统正在运行Linux 2.6.18的x86_64版本,并且已经有了GCC 4.1(即使–version说它是用它构build的,也不支持C ++支持)。 编辑5:在这一点上,下面的步骤只是我试过的一套。 从那时起我已经开始干净了几次了。 我正在寻找一个人来详细说明我需要的所有开关所需的确切顺序。 这是我到目前为止所经历的过程(其中ROOT是我的主目录中的一个文件夹) make-3.82>./configure –prefix=$ROOT && make && make install && hash -r binutils-2.23>./configure –prefix=$ROOT && make && make install autoconf-2.69>./configure –prefix=$ROOT && make && make install automake-1.9>./configure –prefix=$ROOT && make && make install flex-2.5.37>./configure –prefix=$ROOT && make && make install libunwind-1.1>./configure –prefix=$ROOT && make && make install gcc-4.7.2-scratch>../gcc-4.7.2/configure […]