Articles of gcc

强制性dynamic链接库

我从Peter Van Der Linden的书( Expert C programming:deep C secrets )中学习到,有一些特定的库需要dynamic链接;这些库是什么,为什么强制dynamic链接?(更具体地说,GNU / Linux系统)

在RHEL / GCC下如何实现ntohfunction?

生产问题导致我们的团队遇到以下问题: 在RHEL6下使用GCC 4.4.6, ntohs和ntohl是如何实现的? 已知的实现是快速还是慢? 我怎样才能真正看到生成的汇编代码的function? 我知道问题背后的含义可能看起来很牵强和荒谬,但我被要求去调查。 所讨论的硬件是英特尔盒,小端,64位处理器,并编译为64位。

相同的内存空间被重新分配

在每个循环迭代中, variablesj被一次又一次地声明。 那为什么地址还是一样 ? 每次都不应该给一些随机地址吗? 这个编译器是否依赖? #include<stdio.h> #include<malloc.h> int main() { int i=3; while (i–) { int j; printf("%p\n", &j); } return 0; } testing运行:- shadyabhi@shadyabhi-desktop:~/c$ gcc test.c shadyabhi@shadyabhi-desktop:~/c$ ./a.out 0x7fffc0b8e138 0x7fffc0b8e138 0x7fffc0b8e138 shadyabhi@shadyabhi-desktop:~/c$

MinGW海湾合作委员会C编译器的作品,但G + +没有

我是小白,我承认这一点。 无论如何,我在MinGW上遇到了一个非常恼人的问题….我可以用C语言编写和编译程序,但是最近我尝试安装Cmake,但是我不能,因为它每次都会失败testingC ++编译器(g ++)。 所以,这导致我只用C ++编写一个简单的“hello world”程序,然后尝试编译它。 没有骰子。 一次又一次,我没有得到任何回应。 在命令行上,我正在input g++ -o hello++.cpp hello++ 但也尝试过 g++ -o hello++.cxx hello++ g++ -o hello++.cc hello++ g++ -o hello++ hello++.cpp (当然,我将源代码的副本分别保存在同一个目录中,分别使用.cxx和.cc扩展名) 和一堆其他的组合。 每次我什么也得不到。 没有警告。 没有错误。 没有。 目录中没有创build.exe文件,然后在命令行上input“hello ++”,只是给了我一个“找不到命令”的错误。 Soooo ….到底是怎么回事? 为什么gcc命令工作,但g ++不是? 我在Windows 8上,使用cygwin。

Dev C ++简单的线程程序

我创build了一个简单的程序来学习如何使用线程。 这是我创build的代码 #include <iostream> #include <stdlib.h> #include <thread> using namespace std; void count_asc(); void count_desc(); int main() { thread first(count_asc); thread second(count_desc); first.join(); second.join(); system("pause"); return 0; } void count_asc(){ int ctr; for(ctr=1;ctr<=10;ctr++){ cout<<"First thread: "<<ctr<<endl; } } void count_desc(){ int ctr; for(ctr=10;ctr>=1;ctr–){ cout<<"Second thread: "<<ctr<<endl; } } 我正在使用Dev C ++ 5.5.3。 我已经阅读了关于这个问题的其他问题,但是我作为编程的初学者并不能真正理解高级指令。 编译此代码时,会生成以下错误 main.cpp: […]

导致UnsatisfiedLinkError的32位DLL

我正在尝试创build库的32位和64位版本。 命令: gcc -D_WIN32 -O2 -shared -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32 \ -Ic:\OpenSSL-Win32\include -Lc:\OpenSSL-Win32 -leay32 -Lc:\Windows\System32 \ -lnetapi32 -std=c99 -lm -o osaccess-win32.dll osaccess.c …在适当的时候用不同的机器replace32。 他们都build立好了,我的应用程序中的64位作品。 但是,当我试图加载它时,我的32位程序会导致一个java.lang.UnsatisfiedLinkError错误: java.lang.UnsatisfiedLinkError: com.suture.self.Util.OSAccess.osExec(Ljava/lang/String;)Ljava/lang/String; 我已经探索了这种types的错误的所有正常途径(确保使用32位jni.h文件,检查java.library.path等),但一切似乎很好。 我不知道这是否意味着什么,但是当我对这两个DLL运行dumpbin /exports <dll-name> ,我注意到一个小的差异。 32位 ordinal hint RVA name 1 0 00001D1F Java_com_suture_self_Util_OSAccess_osExec@12 64位 ordinal hint RVA name 1 0 0000200E Java_com_suture_self_Util_OSAccess_osExec 32位DLL中@ 12的意义是什么?

从Code :: Blocksconfigurationg ++不会影响命令行

我正在尝试从Code :: Blocks IDE更改g ++的设置。 我去了Settings选项卡,单击Compiler…并检查编译器使用的各种选项,如 启用所有警告( -Wall ) g ++遵循C ++ 11 ISO C ++语言标准( -std=c++11 ) …… 这些只是许多其他的两个; 当我在命令行编译时,这是什么出现: g++ -o example example.cpp # warning: initializer lists only available with -std=c++11 … 注意如何没有任何警告 – 我的程序中有一个未使用的variables。 它只适用于我手动给出的选项: g++ -Wall -std=c++11 -o example example.cpp 你觉得我在设置编译器的时候可能做错了吗? 为什么这些选项不会影响?

从GCC获取预定义的macros,没有临时文件

有没有办法从GCC预处理器检索预定义的macros, 而不必使用临时文件 (例如使用pipe道)? 这里有一个类似的问题在StackOverflow,但所有的答案都使用命令行,而我需要从一个进程内读取提到的数据。 GCC转储预处理器定义 谷歌基本上返回了很多问题的命令行版本的答案。 当我尝试使用pipe道执行将输出引导到Linux上的/ dev / null或Windows上的NUL的命令行技巧时: RunAndGetOutput("cpp -dM -E < NUL"); 发生错误: cpp.exe:错误:<:无效的参数 cpp.exe:警告:'-xc'最后的input文件没有任何作用 cpp.exe:致命错误:没有input文件 编译终止。 当我从命令行执行相同的命令时,一切正常,并且定义它打印的列表。 有什么办法可以解决这个问题吗?

如何编译在Linux的Windows套接字程序?

我有一个使用C编写的程序,它使用以下库: #ifdef _WIN32 #include <winsock2.h> #define socklen_t int #else #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> 在Windows中 ,为了用gcc编译这个程序,你必须使用-lWs2_32属性。 如何在Linux中使用gcc编译它?

在Windows 7上使用frama-c

我已经从frame-c网站http://frama-c.com/download.html安装了Boron版本的Windows安装程序 当我尝试运行val插件时,出现以下错误:预处理器variablesCPP未设置如下: C:\Frama-C\bin>frama-c.exe -val filename.cpp [kernel] user error: failed to run: gcc -C -E -I. -o "C:\Users\akandoor\AppData\Local\Temp\filename.cpp4f5d23.i" "filename.cpp" you may set the CPP environment variable to select the proper preprocessor command or use the option "-cpp-command". [kernel] user error: skipping file "filename.cpp" that has errors. [kernel] Frama-C aborted because of an invalid user input. 与-cpp命令我得到以下错误: […]