Tag: gcc

-Werror导致编译器在#warning上停止。 我该怎么做才能防止这种情况发生?

首先,我希望它停止警告。 但我也希望打印出一些信息性的消息(比如“回来实现这个!”)。 不幸的是,我的编译器不支持#info #message , #pragma message() , #pragma message()等。 我知道有-Wno-error= ,但我的google-foo很弱,我似乎无法找到#warning的 。 我试过-Wno-error=warning ,只是说“没有 – -Wwarning ”。 与“ warn ”相同。 有什么建议? 值得一提的是,我使用的是Tensilica xtensa编译器,xt-xcc,它似乎是一个gnu派生词,或者至少使用了gnu前端。 它的版本是8.0.0。

涉及sin()的两个非常相似的函数表现出截然不同的性能 – 为什么?

考虑以下两个以两种不同方式执行相同计算的程序: // v1.c #include #include int main(void) { int i, j; int nbr_values = 8192; int n_iter = 100000; float x; for (j = 0; j < nbr_values; j++) { x = 1; for (i = 0; i < n_iter; i++) x = sin(x); } printf("%f\n", x); return 0; } 和 // v2.c #include #include […]

如何在osx上使用clang编译共享库

源文件 rsetti::fastidio { /tmp }-> cat foo.c #include void ACFunction() { printf(“ACFunction()\n”); AGoFunction(); } 编译共享库 rsetti::fastidio { /tmp }-> clang -shared -o libfoo.so foo.c foo.c:4:3: warning: implicit declaration of function ‘AGoFunction’ is invalid in C99 [-Wimplicit-function-declaration] AGoFunction(); ^ 1 warning generated. Undefined symbols for architecture x86_64: “_AGoFunction”, referenced from: _ACFunction in foo-lFDQ4g.o ld: symbol(s) not […]

memcpy vs C中的赋值 – 应该是memmove吗?

正如在这个问题的答案中指出的那样,编译器(在这种情况下是gcc-4.1.2,是的,它是旧的,我不能改变它)可以用它认为合适的memcpy替换结构赋值。 我正在valgrind下运行一些代码,并收到有关memcpy源/目标重叠的警告。 当我查看代码时,我看到了这一点(释义): struct outer { struct inner i; // lots of other stuff }; struct inner { int x; // lots of other stuff }; void frob(struct inner* i, struct outer* o) { o->i = *i; } int main() { struct outer o; // assign a bunch of fields in o->i… frob(&o.i, o); return […]

C回调和非Go线程

如何从不是由Go创建的线程调用C中的Go代码? 我分配给C函数指针,以便Go不创建的线程可以调用该指针并进入Go代码? Update0 我不想使用SWIG。 回调将来自线程Go以前没有见过。 cgo/life和pkg/runtime任何内容都不会显示此行为AFAICT。

gdb无法运行“文件格式无法识别”的ELF 64位程序

我正在尝试使用GDB进行调试(以找到恼人的段错误)。 当我跑: gdb ./filename 从命令行,我收到以下错误: This GDB was configured as “i686-pc-linux- gnu”…”/path/exec”: not in executable format: File format not recognized 当我执行: file /path/executable/ 我得到以下信息: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.4.0, dynamically linked (uses shared libs), not stripped 我正在使用GDB 6.1,可执行文件是使用gcc版本3.4.6编译的。 在使用gdb方面,我有点失水,但据我所知,它应该在这个实例中工作。 有什么想法会出错吗?

了解gcc 4.9.2自动矢量化输出

我正在尝试学习gcc自动矢量化模块。 从这里阅读文档后。 这是我尝试过的(debian jessie amd64): $ cat ex1.c int a[256], b[256], c[256]; foo () { int i; for (i=0; i<256; i++){ a[i] = b[i] + c[i]; } } 然后,我只是运行: $ gcc -xc -Ofast -msse2 -c -ftree-vectorize -fopt-info-vec-missed ex1.c ex1.c:5:3: note: misalign = 0 bytes of ref b[i_11] ex1.c:5:3: note: misalign = 0 bytes of ref […]

在Ubuntu上针对libusb-dev进行编译

我正在尝试编译libusb包提供的示例libusb.c(如果你是源代码。) 至少可以这么说。 #include #include #include 这导致它失败,没有libusb/libusb.h它是usb.h ,所以我改变了。 它以新的和创新的方式失败了。 我已经完全复制了文件,并将其命名为example.c 我正在使用这些命令和变体: gcc -o example example.c -lusb -L /usr/lib/libusb.a gcc -o example example.c -lusb -L /usr/lib/libusb.so 编译时遇到的错误是: example.c:25: error: expected ‘)’ before ‘*’ token example.c: In function ‘main’: example.c:46: error: ‘libusb_device’ undeclared (first use in this function) example.c:46: error: (Each undeclared identifier is reported only once example.c:46: […]

arm-none-eabi-gcc:使用printf打印浮点数

我正在为SAM3N arm cortex-M3微控制器编写一个C程序。 当我尝试打印浮点数时,它只打印’f’。 示例: printf(“%f”,43.12); 仅打印f ,而不是43.12 。 但用整数打印效果很好。 如何启用浮动的完整打印? 我知道默认情况下,编译器禁用浮动打印以减少代码大小(即看起来,它们链接了缩减版本)。 另请注意,makefile中没有使用CFLAGS=-Dprintf=iprintf 。 工具详情: ARM / GNU C编译器:(crosstool-NG 1.13.1 – Atmel build:13)4.6.1 以上工具附带Atmel studio 6.0。

如何强制gcc直接在PIC代码中调用函数?

考虑以下function: extern void test1(void); extern void test2(void) { test1(); } 这是在amd64 Linux上没有-fpic生成的代码gcc: test2: jmp test1 当我使用-fpic编译时,gcc通过PLT显式调用以启用符号插入: test2: jmp test1@PLT 然而,对于与位置无关的代码并不严格需要,如果我不想支持,可以省略。 如有必要,链接器无论如何都会将跳转目标重写为PLT符号。 如何在不更改源代码且不使编译代码不适合共享库的情况下,使函数调用直接转到目标而不是通过PLT显式转换?