Tag: gcc

Makefile提供重复错误C.

我创建了一个makefile来同时运行9个程序。 9个程序的名称是init_aim.c,register.c,sort.c,schedule.c,add.c,class_schedule.c,class_list.c,grade.c和report.c。 在我实现代码的每个文件中: #include “aim.h” int main(){ return 0; } 我还有一个带代码的头文件 #ifndef AIM_H #define AIM_H #endif 我唯一的目标是让我的makefile正常工作。 并且还添加“all:”规则。 我当前的makefile看起来像这样。 AIS: init_aim.o register.o sort.o schedule.o add.o class_schedule.o class_list.o grade.o report.o gcc -Wall -ansi -pedantic init_aim.o register.o sort.o schedule.o add.o class_schedule.o class_list.o grade.o report.o -o AIS init_aim.o: init_aim.c aim.h gcc -Wall -ansi -pedantic -c init_aim.c -o init_aim.o […]

使用GCC在C中的函数重载 – 具有多个参数的函数

在前面的一个问题中,当每个函数只接受一个参数时,我找到了一种在C99中重载函数的方法。 请参阅以下内容中的答案: C中的函数重载使用GCC – 编译器警告以获取详细信息。 现在我已经找到了使用单个参数函数的方法,我想知道如何对带有多个参数的函数进行此操作。 我假设它将与__VA_ARGS__和使用…但我似乎无法找到任何有效甚至想要编译的东西。 这适用于带有2个参数的打印: #define print(x, y) \ __builtin_choose_expr(__builtin_types_compatible_p(typeof(x), int) && \ __builtin_types_compatible_p(typeof(y), int), print_int, \ (void)0)(x, y) 但如果我还想要另一个带有一个参数的版本,我就无法重新定义它。 添加这将给我一个错误,说重新定义print : #define print(x) \ __builtin_choose_expr(__builtin_types_compatible_p(typeof(x), char[]), print_string, \ (void)0)(x) 如何重载打印,以便它可以使用2个整数作为输入或字符数组? 示例用法: print(1, 2); print(“this”); 或者甚至更好……我怎样才能使它与任何类型的组合或任意数量的参数一起使用? 还要记住,因为这是C99,_Generic关键字不可用。

链接libavcodec和libavformat:未定义的引用

我正在尝试编译我正在使用ffmpeg库的项目。 该项目用C语言编写。头文件适当地包含在源代码中。 特别是,它似乎使用libavcodec和libavformat ,并且这些库在Makefile中与LDFLAGS正确链接。 以下是使用的标志: -lavcodec -lavformat -lswscale -lavutil 现在,因为Ubuntu附带的打包库太过时了,我下载了ffmpeg的最新源代码,编译并安装它。 我删除了通过包管理器安装的所有打包库。 现在,尽管添加了上面的标志,我得到了很多未定义的引用,我似乎无法解决它。 以下是关于未定义引用的输出: //usr/local/lib/libavcodec.a(cscd.o): In function `decode_frame’: /home/abhijitv/Downloads/ffmpeg-2.5/libavcodec/cscd.c:91: undefined reference to `uncompress’ //usr/local/lib/libavcodec.a(dxa.o): In function `decode_frame’: /home/abhijitv/Downloads/ffmpeg-2.5/libavcodec/dxa.c:250: undefined reference to `uncompress’ //usr/local/lib/libavcodec.a(exr.o): In function `pxr24_uncompress’: /home/abhijitv/Downloads/ffmpeg-2.5/libavcodec/exr.c:784: undefined reference to `uncompress’ //usr/local/lib/libavcodec.a(exr.o): In function `zip_uncompress’: /home/abhijitv/Downloads/ffmpeg-2.5/libavcodec/exr.c:259: undefined reference to `uncompress’ //usr/local/lib/libavcodec.a(flashsv.o): In function `flashsv_decode_block’: /home/abhijitv/Downloads/ffmpeg-2.5/libavcodec/flashsv.c:191: undefined […]

架构x86_64的未定义符号:GCC

我在我的mac pro上安装了gcc 5.3.0,我想通过使用来编译ac程序 gcc main.c -o matrix -mcmodel=medium -lm 但是我收到了这个错误: Undefined symbols for architecture x86_64: “_GLOBAL_OFFSET_TABLE_”, referenced from: _stressXXSX in ccxZn6ac.o _stressYYSX in ccxZn6ac.o _stressXYSX in ccxZn6ac.o _stressYZSX in ccxZn6ac.o _stressZZSX in ccxZn6ac.o _stressXZSX in ccxZn6ac.o _stressXXN in ccxZn6ac.o … ld: symbol(s) not found for architecture x86_64 collect2: erro:ld return 1. _stressXXSX是在main()之前定义的子函数。 使用ubuntu系统在旧计算机上编译时,该程序是可以的。 感谢您的所有建议和帮助!

为什么这个程序不是段错误?

当我为gcc启用-O时,导致输出“Hello”的原因是什么? 它不应该仍然是段错(根据这个维基 )? % cat segv.c #include int main() { char * s = “Hello”; s[0] = ‘Y’; puts(s); return 0; } % gcc segv.c && ./a.out zsh: segmentation fault ./a.out % gcc -O segv.c && ./a.out Hello

如何将-libm传递给MPICC? libimf.so:警告:feupdateenv未实现且始终失败

我是一个新手试图通过mpicc用gcc替换icc来编译程序。 我已经发现 ,我需要使用以下命令进行编译 $ OMPI_CC=gcc make 但是,我收到以下错误消息( 众所周知 ) /opt/intel/fce/9.1.036/lib/libimf.so: warning: warning: feupdateenv is not implemented and will always fail 我试着这样做 $ make clean && OMPI_CC=gcc OMPI_LDFLAGS=-libm make 然后我明白了 /usr/bin/ld: cannot find -libm collect2: ld returned 1 exit status 但是,我在那里找到了文件 lrwxrwxrwx /usr/lib/libm.so -> /lib/libm.so.6 lrwxrwxrwx /lib/libm.so.6 -> libm-2.3.6.so -rw-r–r– /lib/libm-2.3.6.so

如何用我的字符串“交错”C / C ++源(只在适当的地方内部函数)?

例如,有来源: void func1() { func3(); if(qqq) { func2(); } func4( ); } 它应该转变为: void func1() { MYMACRO func3(); MYMACRO if(qqq) { MYMACRO func2(); MYMACRO } MYMACRO func4( ); MYMACRO } 即在每行语句的末尾插入“MYMACRO \ n”,仅在函数内部插入。 怎么做容易? 我应该使用正则表达式吗? 我应该使用什么工具? 例如,gcc可以输出所有语句的所有行号在函数内开始(或结束)吗? @related 如何告诉gcc使用我自己的函数调用每个_line_代码来检测代码? @related 我应该使用什么样的探查器来测量_real_ time(包括等待系统调用)花在这个函数上,而不是_CPU_ one

C浮点数表示法

我注意到这段代码编译但我不明白为什么: int main() { double z = 0.000000000000001E-383DD; } 但我不确定数字末尾的DD意味着什么。 我看过标准,但没有提到这一点。 我从以下命令获得了这个数字: $ gcc -dM -E – < /dev/null #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define __DEC64_DEN__ 0.000000000000001E-383DD … 这可能是GCC扩展吗?

找到打破编译的#define

我遇到一种情况,其中一个头文件中的#define在另一个头文件中打破了枚举声明。 在gcc上使用-E开关我已经确定了我的 #define OFF 0 某处。 问题是,我怎么找出哪里? 该项目规模庞大,包括几十个目录,数百个包含文件。 我最终会做一个全局grep,但问题是,有没有办法问gcc编译器在哪里发生#define? 它显然有这些信息! 更新:感谢不是一个而是两个解决方案 – SO来了。 仅仅是为了记录,罪魁祸首是Sybase客户端库的包含之一(ctlib,甚至不是dblib)。 哎哟。

加载DLL库

是否可以使用C加载DLL并使用其function? 我是C的新手,我正试图在互联网上搜索一些好的参考资料; 但我找不到任何东西。 任何帮助,将不胜感激! 我在Windows 7,64位的Code :: Blocks中使用GNU GCC。