Tag: 编译

在C中创建有效的共享库

我正在做一些测试来学习如何创建共享库。 Code :: Blocks中共享库的模板就是这个 LIBRARY.C // The functions contained in this file are pretty dummy // and are included only as a placeholder. Nevertheless, // they *will* get included in the shared library if you // don’t remove them 🙂 // // Obviously, you ‘ll have to write yourself the super-duper // functions to include […]

记录编译源的时间

我有一个源文件。 当我编译代码时,我希望可执行文件在构建时记住。 我想知道是否有可能。 例如: int main(){ time_t t = ??? // Time when this line is compiled //print out value of t in certain format. return t }

什么是C的高效工作流程? – Makefile + bash脚本

我正在开发一个跨越多个C文件的项目。 对于我的第一对练习程序,我只是在main.c编写了代码并使用gcc main.c -o main编译。 在我学习的过程中,这对我有用。 现在,我正在研究一个更大的项目。 我想继续自己编译(或者至少手动设置),这样我就可以理解这个过程了。 读了一下后,我决定制作一个Makefile。 注意:我也在使用GTK +,因此我必须查找如何将其添加到compile命令中。 这是经过一些研究后的样子: main: gcc -Wall -g main.c -o main `pkg-config –cflags –libs gtk+-2.0` 起初,我只是在运行“make”。 然后我遇到一些问题,即使我更改了文件,也会出现错误“main is latest”。 所以我写了一个脚本: #!/bin/bash rm main make ./main 所以我做了更改,然后运行这个脚本。 这是一个好的/正常的系统吗? 我希望拥有可扩展的系统,因为我的项目将会增长。 我假设我可以保留该脚本,只需将依赖项添加到makefile并更改makefile中的主编译命令。 我对么? 提前致谢。 编辑: 感谢您提供有关如何修复Makefile的反馈。 那么典型的编译过程1)类型make然后2) ./main无论项目如何设置或其大小(假设你已经编写了正确的makefile)?

使用MinGW编译Cython – 未定义的引用PyExc

我正在尝试从“Cython – Python程序员指南”一书中编译一个简单的代码片段,当我编译时,我收到以下错误: H:\Cython>python setup.py build_ext -i –compiler=mingw32 running build_ext building ‘fib’ extension C:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Anaconda3\include -IC:\Anaconda3\include -c fib.c -o build\temp.win32-3.4\Release\fib.o writing build\temp.win32-3.4\Release\fib.def C:\MinGW\bin\gcc.exe -shared -s build\temp.win32-3.4\Release\fib.o build\temp.win32-3.4\Release\fib.def -LC:\Anaconda3\libs -LC:\Ana conda3\PCbuild -lpython34 -lmsvcr100 -o H:\Cython\fib.pyd build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0xb6): undefined reference to `_imp__PyExc_TypeError’ build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0xf3): undefined reference to `_imp__PyExc_TypeError’ build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0x3cc): undefined reference to `_imp___PyThreadState_Current’ build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0x857): undefined reference […]

如何为python编译C / C ++函数

我有一个用cpp编写的源代码,我想编译并在Python中可读。 Python必须提供2个文件名作为输入,并检索矩阵和向量作为输出。 如果我必须在C / C ++中使用它,我会使用2个字符和2个指针,但我不知道如何在Python语言中看到编译的C / C ++程序。 我希望有人可以帮助我。 非常感谢你。

如何确定结构的内存布局?

假设我有以下结构(在C中): struct my_struct { int foo; float bar; char *baz; }; 如果我现在有一个变量,比方说 struct my_struct a_struct; 我怎样才能知道该结构的字段将如何在内存中布局? 换句话说,我需要知道a_struct.foo , a_struct.bar和a_struct.baz的地址是什么。 我不能以编程方式做到这一点,因为我实际上正在交叉编译到另一个平台。 澄清 感谢到目前为止的答案,但我无法以编程方式(即使用offsetof宏,或使用小型测试程序)执行此操作,因为我正在交叉编译,我需要知道字段将如何在目标平台上对齐。 我知道这是依赖于实现的,这是我的问题的重点。 我正在使用GCC编译,针对ARM架构。 我最终需要的是能够从目标平台转储内存并使用其他工具解析它,例如Python的struct库。 但为此,我需要知道这些领域是如何布局的。

c编译器无法在mac上创建可执行文件

每次我尝试从配置文件在我的mac(Maverick)上安装软件包或软件时,它会在检查C编译器时自动失败。 它说“configure:error:C编译器无法创建可执行文件”。 此外,Homebrew完美运作。 我附上了一个config.log的例子。 我没有在以前的相关post中找到任何满意的,如果问题得到解决,我道歉。 ## ———– ## ## Core tests. ## ## ———– ## configure:2530: checking for gcc configure:2546: found /usr/local/bin/gcc configure:2557: result: gcc configure:2786: checking for C compiler version configure:2795: gcc –version >&5 gcc (GCC) 4.8.0 20130113 (experimental) Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for […]

为什么GCC使用Mov而不是推入函数调用?

所以我有这个C程序示例。 int worship(long john) { return 0 * john; } int main() { return worship(666); } 该程序集(基本上)看起来像这样: worship(long): pushq %rbp movq %rsp, %rbp movq %rdi, -8(%rbp) movl $0, %eax popq %rbp ret main: pushq %rbp movq %rsp, %rbp movl $666, %edi call worship(long) popq %rbp ret 我在阅读堆栈粉碎时遇到了这个问题。 在assemblyworship(long):它说movq %rdi, -8(%rbp)我希望它是基于我到目前为止阅读的所有内容使用pushq 。 这是GCC将参数推入堆栈的新方法吗?如果有的话,我可以使用编译器标志来切换它吗?

C / C ++不确定值:编译器优化提供不同的输出(示例)

看起来C / C ++编译器(clang,gcc等)产生与优化级别相关的不同输出。 您也可以查看这篇文章中包含的在线链接。 http://cpp.sh/5vrmv (将输出从none更改为-O3以查看差异)。 根据以下代码,有人可以解释我的一些问题: #include #include int main(void) { int *p = (int *)malloc(sizeof(int)); free(p); int *q = (int *)malloc(sizeof(int)); if (p == q) { *p = 10; *q = 14; printf(“%d”, *p); } return 0; } 是否确定执行将始终进入if语句? 我们怎么知道两个指针p和q的地址是一样的? 为什么没有优化有输出14 ,而-O3有相同指令的输出10 ?

如何在Windows中编译nDPI库附带的ndpiReader.c?

我想创建一个nDPI library附带的ndpiReader.c演示程序的.exe。 我成功地使用在github页面上指定的命令在Ubuntu上编译它,如下所示: ./autogen.sh ./configure make 我试图在Ubuntu中使用GCC交叉编译它,但我没有成功。 我也尝试使用pcapExample.sln在Visual Studio 2012中编译它,但我不断收到如下错误消息: 错误29错误C1083:无法打开包含文件:’ndpi_api.h’:没有这样的文件或目录 虽然ndpi_api.h和我收到此错误的所有其他文件已列在项目解决方案资源管理器中。 有没有人真的能够从这个ndpiReader.c文件中创建一个win32可执行文件? 如果是,请指定步骤,要求或链接。 nDPI lib托管在这里: https : //github.com/ntop/nDPI ndpiReader.c在这里托管: https : //github.com/ntop/nDPI/tree/dev/example pcapExample.sln在此处托管: https : //github.com/ntop/nDPI/tree/dev/example/Win32