Articles of gcc

Windows中的标题alloca.h

在Visual C 2010我看不到任何alloca.h等价物。 如何在Windows上的Visual C执行堆栈分配? 我错过了函数alloca 。

x86-64 Linux中不再允许32位绝对地址?

64位Linux默认使用小内存模式,这将使所有的代码和静态数据低于2GB的地址限制。 这确保您可以使用32位绝对地址。 老版本的gcc使用静态数组的32位绝对地址来保存一个额外的相对地址计算指令。 但是,这不再起作用。 如果我试图在程序集中创build一个32位的绝对地址,我得到链接器错误:“在创build共享对象时不能使用对`.data的重定位R_X86_64_32S;使用-fPIC重编译”。 这个错误信息当然是误导性的,因为我没有创build一个共享对象,-fPIC也没有帮助。 到目前为止我发现的是:gcc版本4.8.5使用静态数组的32位绝对地址,gcc版本6.3.0不使用。 版本5可能不会。 binutils 2.24中的链接器允许使用32位绝对地址,而2.28版不支持。 这种改变的后果是,旧的库必须重新编译,旧的汇编代码被破坏。 现在我想问一下:这个改变是什么时候发生的? 有logging吗? 有没有一个链接器选项,使其接受32位绝对地址?

使用非MSVC编译器在Windows下使用带Unicode文件名的文件打开fstream

当文件名是“Unicode”文件名时,我需要打开一个文件作为std :: fstream(或实际上任何其他std :: ostream)。 在MSVC下,我有非标准扩展std::fstream::open(wchar_t const *,…) ? 我可以用其他编译器如GCC(最重要的)和Borland编译器做些什么。 我知道CRTL提供了_wfopen但它提供了C FILE *接口而不是io-streams,也许有一个非标准的方式来从FILE *创buildio-stream? 是否有任何boost::ifstream MSVC扩展为Windows?

哪里可以得到编译版本的gccxml在Windows上?

任何人都可以指向一个地方,我可以得到一个编译版本的gccxml在Windows上?

未定义的引用“inflateInit2_”

我正在使用Code Blocks IDE,我想为SFML安装Tiled Map Editor。 所以,我下载了源代码并将其导入到我的项目中。 不幸的是,由于缺lesszlib库,构build完成了一个错误。 我下载并重新构build。 这次我收到一个错误,内容如下: undefined reference to `inflateInit2_'| undefined reference to `inflateEnd'| undefined reference to `inflateEnd'| 在互联网上,我发现join链接器命令-lz的build议,但编译器拒绝抛出错误: 无法find-lz 。 有谁知道如何修理它? 问候。

时间函数在mingw

我正在尝试执行此页面中给出的代码 http://msdn.microsoft.com/en-us/library/windows/desktop/aa366062%28v=vs.85%29.aspx 我正在使用mingw(gcc)来编译这个。 但下面的行不能被编译。 我已经包含了'time.h'。 我search,但无法find这个'_localtime31_s'或其等价物在gcc中。 error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained); error = asctime_s(buffer, 32, &newtime); 这里的时间在哪里? 谢谢

在Windows上的gcc:生成的“a.exe”文件消失

我正在使用GCC版本4.7.1,但我也在GCC 4.8上试过。 这是我想要编译的代码: #include <stdio.h> void print(int amount) { int i; for (i = 0; i < 5; i++) { printf("%d", i); } } int main(int argc, char** argv) { print(5); return 0; } 它看起来应该工作,当我编译… gcc main.c 编译需要一段时间,产生一个a.exe文件,并且a.exe文件消失。 这不是我的代码给我任何错误。 这里有一个certificate,因为有些人误解了这一点:

什么是GCC默认包含目录?

当我用gcc编译一个非常简单的源文件时,我不必指定标准包含文件(如stdio或stdlib)的path。 GCC如何知道如何find这些文件? 它里面有硬连线的/usr/includepath吗,还是会得到其他操作系统组件的path?

GCC / C如何隐藏控制台窗口?

**** C新手提醒****如何编译一个C应用程序,使其运行时不显示Windows上的控制台窗口? 我正在使用Windows XP和GCC 3.4.5(mingw-vista特殊r3)。 我已经详细search了这个,我已经提出了以下内容,根据我所读到的,听起来像是应该做的,但不在我的系统上: #include <windows.h> #include <stdlib.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { system("start notepad.exe"); } 我也尝试向GCC传递“-mwindows”参数无济于事。 代码示例启动记事本,但仍闪烁了一个命令提示符。 编辑:FWIW我也曾尝试ShellExecute系统()的alernative,虽然我会很高兴甚至得到一个空的main()或WinMain()在这一点上工作的应用程序。

如何在C中find函数的返回地址?

我正在尝试在C和GCC中使用less量的AT&T风格的内联汇编,在这里阅读一篇关于CodeProject的文章。 我希望这样做的主要原因是findEIP寄存器的旧值,以便能够在我的代码中拥有可靠的指令地址。 我已经写了一个简单的示例程序来展示我对这个概念迄今为止的理解: #include <stdio.h> #include <stdlib.h> int mainReturnAddress = 0; int main() { asm volatile ( "popl %%eax;" "pushl %%eax;" "movl %%eax, %0;" : "=r" ( mainReturnAddress ) ); printf( "Address : %d\n", mainReturnAddress ); return 0; } 这个例子的目的是从堆栈顶部popup4个字节,表示从EIP寄存器保存的32位返回地址,然后将其推回堆栈。 之后,我将其存储在全局mainReturnAddressvariables中。 最后,我打印存储在mainReturnAddress中的值。 我从这个代码4200560收到的输出。 这段代码是否达到上述目的,是Windows平台32位上的交叉处理器吗?