Tag: 编译

什么是Delphi DCU文件?

什么是Delphi DCU文件? 我相信它代表“Delphi Compiled Unit”。 假设它包含目标代码,我是否正确,因此对应于从C / C ++源代码文件编译的“.o”文件?

根据环境选择C二进制文件

我已经使用特定标志(-Os,-O2,-march = native及其组合)编译了我的代码,以便产生更快的执行时间。 但我的问题是我不会总是在同一台机器上运行(因为在我的实验室中有几台不同的机器)。 有时我在MacOS或Linux内运行(在两种情况下都有不同的OS版本)。 我想知道是否有办法确定运行哪个二进制文件,具体取决于二进制文件运行的环境(我的意思是缓存大小,cpu核心,以及有关特定机器的其他属性)? 换句话说,如何根据所使用的特定机器选择(当程序加载时)更快的二进制文件(以前使用不同的目标二进制文件大小和指令集扩展编译)? 提前致谢。

如何在gcc中编译一个包含头文件的C程序?

我想在gcc中编译一个C程序,它有我的2个头文件。 我正在使用命令: gcc UDP_Receive.c -o UDP_Receive -lm 编译它但我得到一个错误,指出“UDP_Data.h:没有这样的文件或目录” 如何告诉编译器包含这些头文件? 头文件: #include“UDP_Data.h” #include“Crypt.h” 谢谢,Ritesh

在GCC预处理器输出中调试信息

我正在检查GCC生成的预处理输出,我在使用-save-temps标志生成的.i文件中看到了很多这些: # 8 “/usr/include/i386-linux-gnu/gnu/stubs.h” 2 3 4 stubs.h的绝对路径之前和之后的数字是什么意思? 它似乎是由预处理器插入的某种调试信息,并允许编译器发出引用此信息的错误消息。 这些行不会影响程序本身,但每个数字具体是什么?

在Windows 7上使用GCC进行编译:\ mingw32 \ bin \ ld.exe:无法打开输出文件a.exe

这是我在尝试用gcc编译一个简单的hello world程序时得到的。 c:\>gcc hello.c hello.c:9:2: warning: no newline at end of file C:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot open output file a.exe : Permission denied collect2: ld returned 1 exit status 它与Windows 7管理权限有关吗? 如果正在创建输出文件但无法打开,它位于何处? 对不起,如果这是一个noobie问题太多了。 到目前为止,我一直在使用Dev-C ++来编译我的源代码。 我尝试使用谷歌搜索错误,但我发现所有文件已经打开,但在任务管理器中没有提到这样的exe。 编辑:该文件也位于C:\ hello.c 如果我把它放在其他驱动器中,我能做到吗? 当我将文件放在D:\并尝试使用cd d:\将其更改为任何其他驱动器时不会更改驱动器。

未找到libcurl符号

真是愚蠢的C问题。 我正在尝试在这里构建源代码,以便我可以开始为自己修改它 http://curl.haxx.se/libcurl/c/ftpget.html 我下载文件,然后运行 gcc -o test ftpget.c 得到 Undefined symbols: “_curl_global_init”, referenced from: _main in ccFchguB.o “_curl_easy_perform”, referenced from: _main in ccFchguB.o “_curl_easy_setopt”, referenced from: _main in ccFchguB.o _main in ccFchguB.o _main in ccFchguB.o _main in ccFchguB.o “_curl_easy_cleanup”, referenced from: _main in ccFchguB.o “_curl_easy_init”, referenced from: _main in ccFchguB.o “_curl_global_cleanup”, referenced from: _main in […]

不同编译器的不同输出 – C和C ++

你能想到“一个程序”,它为C和C ++编译器提供了“不同的输出”(但是在同一种语言下提供了一致的输出)吗?

在C源文件中包含带有命名空间的C ++头文件会导致编译错误

我不是一个专业的C ++程序员,我最近在C ++中做了一个技巧,这引起了我下面的问题。 我的任务目标:复制特定的非系统线程(实际上是协作线程)安全模块,以创建系统线程安全版本,以支持系统中的不同需求。 但是我们决定创建一个名称空间来保护C ++头文件中的系统线程版本,而不是创建sys_XXX函数来保持兼容性。 我实际上可以将它包含在CPP文件中并愉快地工作但我刚刚意识到我的funcInit调用在它到达CPP文件控件之前没有被调用。 不幸的是,协作线程版本的这个init是在C文件中。 现在我需要从同一个地方初始化我的系统线程安全版本,但我已被编译错误阻止,这是我所知道的难以解决的。 编译错误日志: – In file included from sysinit.c:87: sys_unicode.h:39: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘SystemThreadUtils’ <== corresponds to line [namespace SystemThreadUtils {] sysinit.c:88: sysinit.c:512: error: expected identifier or '(' before string constant <== corresponds to line [extern "C" bool SystemThreadUtils::funcInit(void);] sysinit.c:513: error: expected […]

在跨平台应用程序中使用snprintf

我正在编写一个C程序,预计将与所有主要编译器一起编译。 目前我在Linux机器上开发GCC,并在提交代码之前在MSVC上编译。 为了使交叉编译变得容易,我正在使用-ansi和-pedantic标志进行编译。 这很有效,直到我开始使用c89标准中没有的snprintf 。 GCC可以在没有-ansi开关的情况下编译它,但MSVC总是会失败,因为它没有C99支持。 所以我做了类似的事情, #ifdef WIN32 #define snprintf sprintf_s #endif 这很有效,因为snprintf和sprintf_s具有相同的签名。 我想知道这是正确的做法吗?

gcc默认在Mac OS X上的C中链接数学库?

从这个问题: 为什么你必须在C中链接数学库? 我知道C数学库(libm)与C标准库(libc)分离,默认情况下没有链接。 但是当我在mac osx 10.11.1上使用gcc filename.c而不是-lm编译下面的代码时: #include #include int main (void) { double x = sqrt (2.0); printf (“The square root of 2.0 is %f\n”, x); return 0; } 没有链接错误,输出可执行文件正常工作。 然后我试了otool -L output : output: /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1225.1.1) /opt/local/lib/libgcc/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0) 我想知道mac上有一些库结构差异吗? 或者它是gcc 5.2.0的新function? 非常感谢! 更新: […]