Tag: 编译

如何在执行期间编译C代码,并获得指向相应函数的指针?

假设我在执行期间生成了一个C程序: source = “int add_x_y(int x, int y){ return x + y; }”; source_size = 42; 我想要以下function: void* compile(char* source, int source_size); 这样: int (*f)(int,int) = compile(source, source_size); printf(“%d\n”,f(2,3)); 输出: 5 compile不能依赖于外部工具(编译器),因为我想在emscripten(将C程序转换为.js文件)中使用它。 那可能吗?

编译C代码的字符串

真的离开墙问题,但有没有办法在GCC中编译一串C代码而没有任何媒介来保存该字符串(例如,源文件)? 有点像: $ gcc “#include int main( void ){ printf(‘hello world’); return 0;}” -o test 感觉真的很脏,但如果有一些简单的方法来做这种事情,那将是非常好的。

由各种编译器编译的链接库

我想更详细地询问我最近在这里得到的答案(第3章): 编译语言基础知识 如果我用C和MinGW写,我链接到VC编译的C ++库 – 它会工作吗? 我怎么事先知道? 换句话说,如果我能够在没有警告的情况下创建链接到该C ++ .dll的.exe,并且我能够运行(只运行,没有进一步测试).exe,它是否意味着它有效? 在某些时候它不会被核心转储吗? 为了完全确定,我是否需要自己重新编译库源以及与之链接? 我知道有时连接C ++和C代码可能会有问题,但是如何知道它何时起作用? PS:是的,我看到使用库编译了…我只是觉得我的问题略有不同。

如何强制OpenMPI使用GCC而不是ICC? 是否需要重新编译OpenMPI?

我有一个为gcc编写的并行计算的C代码,我想在一个集群上编译它,显然它通过mpicc使用icc 。 将代码更改为icc友好似乎对时间要求太高,所以我想知道我是否可以要求OpenMPI使用gcc代替。 我没有该群集的管理员权限,我实际上更愿意不弄乱原始配置。 如果无法在例如Makefile设置,那么我希望在我的主目录中编译OpenMPI ,但是我需要一些指导,然后必须做什么。 你可以帮帮我吗? UPDATE1 Makefile包含 CC = mpicc CFLAGS += -DMPI 这里有一些OpenMPI文件 $ which mpicc /usr/bin/mpicc lrwxr-xr-x /usr/bin/mpicc -> opal_wrapper -rwxr-xr-x /usr/bin/opal_wrapper 如果我能为您提供更多信息,请告诉我。 UPDATE2 在Jeff的帮助下 ,我能够找到mpicc OpenMPI设置 $ more /usr/local/share/openmpi/mpicc-wrapper-data.txt project=Open MPI project_short=OMPI version=1.1.4 language=C compiler_env=CC compiler_flags_env=CFLAGS compiler=icc extra_includes= openmpi preprocessor_flags= compiler_flags=-pthread linker_flags= libs=-lmpi -lorte -lopal -ldl -Wl,–export-dynamic -lnsl -lutil -ldl […]

如何使用NDK编译Android的现有C程序?

我正在编写一个Android应用程序来测试网络性能,我想在应用程序中使用iPerf。 我可以找到已经为Android编译的二进制iPerf文件(然后我可以在手机上运行iPerf并收集其输出)但我有兴趣自己编译文件。 在这里,有人提供了可用于编译程序的脚本: http : //sourceforge.net/tracker/index.php?func = enter&aid = 3533374&group_id = 128336 &atid = 711373 我知道它需要NDK,但我不知道从哪里开始。 是否有任何好的资源或建议可以帮助指导我自己编译(在Windows上,但我也有Cygwin)。 我知道C以及如何在linux上使用GCC,但我不知道从哪里开始。 在此先感谢您的帮助!

C(++)对未存储在变量中的值有什么作用?

我对C和C ++如何处理未存储在变量中的数据感到有点好奇,例如: int IE6_Bugs = 12345; int Win_Bugs = 56789; 是的 – 一切都很清楚。 IE6_Bugs有123456存储在它的特定内存地址。 那怎么样.. if ( IE6_Bugs + Win_Bugs > 10000 ) { // … 因此,C抓取两个变量的值并添加它们,以便将结果与右侧的int进行比较。 但: IE6_Bugs+Win_Bugs到达RAM吗? 或者处理器是否通过自己的缓存直接比较值? 或者,在编译过程中,上面的if语句转换为机器更“可理解”的东西? (也许首先计算IE6_Bugs+Win_Bugs并将其存储在某个变量中,……)

是否可以使用python编译c代码?

我想构建一个python程序,它将.c文件的路径作为输入,然后编译它。 如果编译成功,程序将输出OK到屏幕,否则输出BAD。 我一直试图谷歌,但找不到任何东西。 我一直在尝试使用编译程序的参数在python中运行cmd,但它不起作用。 澄清 – 我已经在我的机器中有一个非常具体的编译器,我想运行它。 我不希望python充当编译器。 只需获取代码,在其上运行我的编译器,然后查看答案是什么。 它应该在使用python 2.4的Linux服务器上运行。 谢谢

什么是gcc中的-ffreestanding选项?

什么是gcc中的ffreestanding ? 它是干什么用的 ? 我遇到了以下情况: gcc -ffreestanding -m32 -c kernel.c -o kernel.o 并且不明白,它究竟意味着什么。

如何使用GCC在C上编译库?

我用文件pila.h和pila.c了一个库。 我使用gcc pila.c -c编译文件pila.c ,这个库工作正常。 我测试过了。 然后我又建了一个图书馆。 该库包含文件pila_funciones_extra.h和pila_funciones_extra.c 。 在这个库中,我需要包含第一个库。 在文件pila_funciones_extra.h我将下一行包括在内: #include “pila.h” 并在文件pila_funciones_extra.c我放下一行: #include “pila_funciones_extra.h” 必须如此。 但是当我尝试编译文件pila_funciones_extra.c ,编译器不会识别包含库pila 。 它表示库pila中定义的函数,结构,常量和宏尚未定义。 我尝试使用gcc pila_funciones_extra.c -c和gcc pila_funciones_extra.c -c pila.o编译它,但它不起作用。 我确保所有文件都在同一个文件夹中。 我正在研究Ubuntu。 谁能告诉我正确的编译方法?

C编程:从汇编程序的角度来看++ i和i = i + 1之间的区别?

这是一个面试问题。 我说他们是一样的,但这被判定为不正确的回应。 从汇编程序的角度来看,有什么可以想象的区别吗? 我使用默认的gcc优化和-S编译了两个简短的C程序来查看汇编器输出,它们是相同的。