Articles of gcc

链接错误与OpenSSL

我已经安装了OpenSSL。 我只想运行一个使用OpenSSL的程序。 这里是我的程序,从这里拿走。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "openssl/aes.h" int main(int argc, char* argv[]) { AES_KEY aesKey_; unsigned char userKey_[16]; unsigned char in_[16]; unsigned char out_[16]; strcpy(userKey_,"0123456789123456"); strcpy(in_,"0123456789123456"); fprintf(stdout,"Original message: %s", in_); AES_set_encrypt_key(userKey_, 128, &aesKey_); AES_encrypt(in_, out_, &aesKey_); AES_set_decrypt_key(userKey_, 128, &aesKey_); AES_decrypt(out_, in_,&aesKey_); fprintf(stdout,"Recovered Original message: %s", in_); return 0; } 在编译程序的时候,我得到了同样的错误信息,但是提供的解决scheme并不适合我。 我仍然收到编译错误。 […]

在运行configure时configuration不同于默认值的编译器

我正在编译glibc库。 在我能做到这一点之前,我需要运行configure 。 但是,为了编译glibc,我需要使用不是机器上默认编译器的gcc编译器。 手册中说了以下内容。 It may also be useful to set the CC and CFLAGS variables in the environment when running configure. CC selects the C compiler that will be used, and CFLAGS sets optimization options for the compiler. 现在我的问题是,我没有在该机器上的任何pipe理权限。 那么我怎样才能使用不同于默认的编译器。

GCC:putchar(char)inline assembly

溢出, 我怎么才能实现使用内联汇编的putchar(char)过程? 我想在x86-64程序集中做到这一点。 我这样做的原因是实现我自己的标准库(或至less它的一部分)。 这是我到目前为止: void putchar(char c) { /* your code here: print character c on stdout */ asm(…); } void _start() { /* exit system call */ asm("mov $1,%rax;" "xor %rbx,%rbx;" "int $0x80" ); } 我正在编译: gcc -nostdlib -o putchar putchar.c 感谢您的帮助!

Makefile c ++ 11支持

我最近用C ++开始了一个小项目。 我创build了一个简单的Makefile: CC=g++ CFLAGS =-std=c++0x -I. -c VPATH = src include vpath %.c src vpath %.h include TabooSearch : main.o Task.o TabooList.o $(CC) $(CFLAGS) -o TabooSearch main.o Task.o TabooList.o 问题是,当我运行make我得到这种错误forms的海湾合作委员会: error: 'nullptr' was not declared in this scope 我没有任何IDE我的Makefile有什么问题,有人可以帮我解决这个问题。 在Debian上,我的gcc版本是4.7.2 提前致谢

如何创build一个仅在pthread链接时才使用互斥体的库?

我正在Linux上创build一个C库,它有几个function,它们共同操作一些全局数据。 为了使这些函数成为线程安全的,他们必须在代码中的适当位置使用互斥锁。 在Linux中,为了在应用程序中使用pthread,需要在适当的库中链接-lpthread 。 在编译我的库的情况下,如果它的用户决定在他们的应用程序中使用pthreads,并且他们不这样做,我想让它工作。 在开发人员在应用程序中不使用线程的情况下,它们不会与pthreads链接。 因此,我希望我编译的库不要求它,而且,在单线程应用程序中使用互斥体使用不必要的开销(更不用说是愚蠢的)。 是否有某种方式来编写代码(如果有必要,使用GCC扩展)只有某些符号被链接时,某个代码块才会运行? 我知道我可以使用dlopen()和朋友,但是这本身就需要一些我想要避免的东西。 我想我所要找的东西必须存在,因为几个标准函数在同一条船上,并且需要互斥体是线程安全的(而且是互斥的),但是即使不与pthread链接,也能工作。 在这一点上,我注意到66&67行上的FreeBSD的popen()函数使用了非可移植的检查 – isthreaded ,以确定是否使用线程,以及是否使用互斥锁。 我怀疑这样的东西是否以任何方式标准化。 但是更重要的是,如果符号不被识别,那么这样的代码就不能编译和链接,而在Linux中,如果pthread没有链接,互斥符号将不会存在。 总结一下:在Linux上,如何创build一个库,它知道什么时候使用线程,如果是,在适当的情况下使用互斥锁,并且不需要链接到pthread,除非应用程序开发人员特别想在某处使用线程。

如何在C中手动迭代堆栈帧?

在处理应用程序中的信号时,我可以在debugging器中正确地看到回溯。但是回溯系统调用不能正确显示堆栈帧。gdb如何存储堆栈帧以及回溯系统调用如何转储它们?

为什么++ * ++ ++的工作,而++我++不工作?

假设p是一个整数指针, i是一个整数: *p++给出一个对应于p 的整数值 。 i++给出一个整数值加1 由于行为,上述收益整数, ++*p++和++i++不应该有相同的错误报告? 但为什么++*p++工作,而++i++给编译器错误? int main() { int a[10] = {0}; int *p = (int*)&a; int i = 0; // printf("%d", ++i++); — FAILS error: lvalue required as increment operand printf("%d\n", ++*p++ ); // Prints 1 return 0; } 编辑 ++ i ++分解如下: i++ ++(result) 这正是我困惑的地方:以同样的方式,我们可以将++ * p ++分解为 *p++ […]

如何避免简单的“字符”的海湾合作委员会警告:“无符号字符”或“签名字符”转换?

我的默认chartypes是在gcc选项(-funsigned-char gcc)中设置的“unsigned char”。 所以可以说,当我需要代码中的“无符号字符”时,我可以使用“char”。 但我得到(char *)和(unsigned char *或signed char *)之间的转换警告: "error: pointer targets in passing argument 1 of 'test2' differ in signedness" 。 当我将unsigned char *variables传递给char时,我该如何避免警告(知道我的系统具有由编译器选项设置的默认无符号字符)? static void test2(char* a) //char is unsigned by deafult as set by -funsigned-char gcc option { } void test1(void) { // This passes, but if i change it to […]

使用CUDA 6.0的C ++ 11标准

我想在我的CUDA 6.0项目中为我的C ++文件使用C ++ 11标准。 当我将CUDA 6.0 Nsight Eclipse设置中的编译器更改为g ++并添加-std=c++11选项时,我收到了很多像这样的错误: error: namespace "std::__gnu_cxx" has no member "__normal_iterator" 显然,我必须为CUDA“select”一次编译器,然后再select我的C ++文件。 我该怎么做? 安装支持未公开的C ++ 11的CUDA 6.5不是一个选项。

/usr/lib64/libstdc++.so.6:未find版本`GLIBCXX_3.4.15'

我正在尝试运行appiumtesting。 但是我得到错误说什么: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found 我正在使用RedHat6.6。 当我运行: strings /usr/lib/libstdc++.so.6 | grep GLIBC 我得到这个: GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBC_2.0 GLIBC_2.3 GLIBC_2.4 GLIBC_2.1 GLIBC_2.1.3 GLIBC_2.3.2 GLIBC_2.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH 是否有可能为RedHat6.6获得GLIBCXX_3.4.15?