Articles of gcc

如何在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位上的交叉处理器吗?

gtk_widget_queue_draw中,Windows 7下的内存泄漏

以下GTK程序: #include <gtk/gtk.h> GtkVBox *vbox; GtkWindow *win; gboolean Timer (gpointer user_data) { gtk_widget_queue_draw (GTK_WIDGET (vbox)); return 1; } int main(int argc, char **argv) { gtk_init(&argc, &argv); win = (GtkWindow*)gtk_window_new(GTK_WINDOW_TOPLEVEL); vbox = (GtkVBox*)gtk_vbox_new(TRUE, 1); gtk_container_add(GTK_CONTAINER(win), GTK_WIDGET(vbox)); g_timeout_add (200, Timer, 0); gtk_widget_show_all(GTK_WIDGET(win)); gtk_main(); return 0; } 在任务pipe理器显示的使用gcc 4.5.2编译的Windows 7 64位下泄漏。 它在Windows XP 32位下编译时不会泄漏。 该程序什么都不做。 它创build一个窗口,放在那里有一个盒子,然后从一个定时器每个200ms调用gtk_widget_queue_draw。 这是一个batch file来编译和链接testing。 […]

不能运行任何程序

我下载了clion,并通过jetbeans提供的设置指南: https ://www.jetbrains.com/help/clion/2016.3/quick-tutorial-on-configuring-clion-on-windows.html我试图设置cygwin和minGW作为环境,但程序不会运行。 我跟着这个问题: 如何设置编译和运行的Clion 我已经在path中追加了cygwin和minGW的目录,但是仍然无法运行我的程序。 这引起了一个长期的错误, CMake Error at /cygdrive/c/Users/dell/.CLion2016.3/system/cygwin_cmake/share/cmake-3.6.3/Modules/CMakeTestCCompiler.cmake:61 (message): The C compiler "/cygdrive/c/MinGW/bin/gcc.exe" is not able to compile a simple test program. 它失败,输出如下: Change Dir: /cygdrive/c/Users/dell/Desktop/jetBeans/c_c++/cmake-build-debug/CMakeFiles/CMakeTmp Run Build Command:"/usr/bin/make.exe" "cmTC_2284f/fast" /usr/bin/make -f CMakeFiles/cmTC_2284f.dir/build.make CMakeFiles/cmTC_2284f.dir/build make[1]: Entering directory '/cygdrive/c/Users/dell/Desktop/jetBeans/c_c++/cmake-build-debug/CMakeFiles/CMakeTmp' Building C object CMakeFiles/cmTC_2284f.dir/testCCompiler.co /cygdrive/c/MinGW/bin/gcc.exe -o CMakeFiles/cmTC_2284f.dir/testCCompiler.co -c /cygdrive/c/Users/dell/Desktop/jetBeans/c_c++/cmake-build-debug/CMakeFiles/CMakeTmp/testCCompiler.c gcc.exe: error: /cygdrive/c/Users/dell/Desktop/jetBeans/c_c++/cmake-build-debug/CMakeFiles/CMakeTmp/testCCompiler.c: No such […]

在Windows上使用包含Rtools和Rcpp的gcc版本

在我开始更新gcc之前,有没有人真正尝试过这一点,他们可以确认从源代码构buildR需要更新用于编译c ++代码的gcc版本(即不一定用于包创作,当然不适用于CRAN-有效包)? 请参阅Dirk对此问题的回答,以及来自原始海报的后续评论如何在Windows上使用gcc 4.8.1与Rcpp 。

C ++:安全使用longjmp和setjmp?

在linux / gcc的C ++中使用longjmp和setjmp关于以下方面是否安全? exception处理(我没有使用longjmp / setjmp实现exception处理,我想知道longjmp / setjmp对标准exception处理有什么副作用) *this指针 信号 智能指针(boost的共享和入侵指针) 还有什么你能想到的。

在Windows 7上编译和运行GTK +应用程序

系统:Windows7,32位,GTK 2.24.10,mingw 我正在尝试编写基本的helloworld.ctypes的基于GTK的应用程序。 但是,它不运行。 这是我遵循的步骤。 安装MinGW。 一起下载GTK +。 提取C:\ gtk文件夹中的内容。 打开cmd并进入C:\ gtk \ bin目录并运行pkg-config –cflags –libs gtk + -win32-2.0 它将打印编译标志列表,以及将项目链接到的库。 复制它们,并创build一个浴文件如下。 设置VAR = FLAGS start cmd,其中VAR = GTK,FLAGS =前一个命令的输出(pkg-config)。 当你想编译文件使用命令:gcc foo.c%VAR% D:\ gtk> gcc -o project helloworld.c%GTK% gcc:%GTK%:没有这样的文件或目录helloworld.c:1:21:错误:gtk / gtk.h:没有这样的文件或目录helloworld.c:在函数'main':helloworld.c:5:error: 'GtkWidget'未声明(在此函数中首次使用)helloworld.c:5:错误:(每个未声明的标识符只会报告一次helloworld.c:5:错误:对于每个函数都会显示。)helloworld.c:5:error :'窗口'未声明(首次在此函数中使用)helloworld.c:9:错误:'GTK_WINDOW_TOPLEVEL'未声明(首次在此函数中使用) D:\gtk>gcc -Wall -g helloworld.c -o helloworld pkg-config –cflags gtk+-2.0 pkg-config –libs gtk+-2.0 gcc: […]

在windows下编译linux gcc – 在windows下编译nvcc

这里有一个有趣的问题,如果得到肯定的回答,会使交叉编译更容易。 由于gcc是用C ++编写的,是否可以在Windows MinGW G ++或VSC ++编译器上重新编译Linux gcc编译器,以便生成的Windows可执行文件能够将c代码编译到linux程序中? 如果是这样,那么需要做什么呢? 所以为了简化,这是我想要做的。 mingw32-g++ gcc.cpp -o gcc.exe 这个命令可能不会起作用,因为如果那么容易的话,它可能已经完成了。 我问的是这个概念是否可能。 编辑:感谢和扩大到NVCC的问题 fvu能够回答gcc编译器的问题(请下次使用答案button),所以如果你有同样的问题,你可以感谢他(或她)。 作为这个问题的延伸,是否有可能编辑或重新编译nvcc或它使用的东西,以便nvcc.exe可以从CUDA C代码创build一个Linux程序? 我读过nvcc的windows变体只能使用Visual Studio cl.exe而不使用MinGW或CygWin。 有可能与cl.exe创buildLinux程序? 如果是这样,可以用来生成与nvcc.exe的Linux程序?

你需要安装使用Clang在Windows上构build64位的C + + 14?

更新: 我已经写了一个详细的教程,包含这个问题的前两个答案: http : //blog.johannesmp.com/2015/09/01/installing-clang-on-windows-pt1/ TL; DR 在Windows上,给定以下程序: #include <iostream> int main() { int arr[] = {1, 2, 3, 4, 5}; for(auto el : arr) { std::cout << el << std::endl; } return 0; } 我希望能够做到以下几点: clang++ hello.cpp -o hello.exe -std=c++14 并获得一个64位可执行文件正常工作 。 我不想再追加大量的-I包括告诉clang在哪里可以findiostream或其他标准的c ++头文件; 我不想在多个步骤中链接。 我不关心性能,效率,链接器的使用等等。我只是想能够正确设置clang / gcc /任何东西,这样我就可以使用一个单一的,快速和肮脏的控制台命令上面那个。 我需要安装什么才能工作 ? 问题 作为一个主要的Mac / […]

GCC – 链接到另一个文件夹中的库工作,但二进制文件不会运行

我正在一个C ++项目,生成几个EXE和几个DLL。 为了整洁,我想要在Lib文件夹中生成这些DLL,所以构build的项目将如下所示: MyProject —-myExe1.exe —-myExe2.exe —-Lib —-myLib1.dll —-myLib2.dll 我能够成功地获得内置到Lib文件夹中的DLL,并且我能够在EXEs的链接命令中使用-L..\bin\Lib成功链接到新位置中的DLL。 但是,当我去实际运行的EXE,他们抱怨说,他们无法find有问题的DLL。 从我做的研究看来,即使我可以链接到其他文件夹中的库, 加载它们仍然需要它们与二进制文件在同一个文件夹中。 GCC,链接库,找不到? 表明这只是事情的方式,但是提到“系统必须能够finddll;即它必须位于当前工作目录中,path中的目录或其目录中必须被添加到一个特殊的环境variables用于这个东西“。 什么“特殊的环境variables”被引用(我假设它不是%PATH%或评论将没有具体提到的path),有没有一种方法,我可以设置它,使我的DLL可以正确加载?

如何使用MinGW调用WMI

经过几天的searchnetworking(包括MSDN)的方式获得硬件唯一ID使用C ++,我发现我需要使用WMI。 其实我可以find一些很好的例子,就像这个一样。 问题是:我不能使用MinGW进行编译,但使用Microsoft编译器在Visual Studio上运行得很好,但是使用MinGW(我的应用程序编译时)却给了我几十个错误。 这听起来可能是一个老问题,但不幸的是,在search网页后的几天里,我找不到解决scheme。 我在Windows 7上使用MinGW。