Articles of gcc

在Linux中用于Windows CE的C ++开发

我如何在我的Linux Ubuntu上开发和编译命令行C ++程序,用于我的具有Windows CE 3.1(HPC 2000)的Jornada 720,类似于像Palm那样的编译器或类似gcc的编译器,以及开发和编译教程将是非常好的,请记住,我想build立命令行程序到Windows CE,在Windows CE的cmd下运行的程序。 谢谢!

gcc __attribute __((selectany))替代linux?

我想知道是否有一个替代__attribute__((selectany))在Linux中? 我想定义类似的东西: char * a[] = { "qwe", "zxc" }; 在头文件中,并将其包含在许多将被链接在一起的.c文件中。 所以链接器会看到多个“a”的定义,因此不会链接。 我读过这个属性(selectany),它将只使用第一个看到的“a”的定义,不幸的是它仅用于ms窗口。 所以问题是:有没有在Linux的替代方法? 编辑 :实际的问题是:是否有办法指示链接器只使用第一个看到的定义,并忽略其他任何其他可能即使他们不同? 我知道有很多方法来定义我的数据,我不是在寻找如何定义我的数据的解决scheme,而是我想知道是否有办法有多个定义,并使链接器与第一次看到的工作。 ..

在linux下使用C后播放获取IP地址

我在linux下用C编写了一个简单的客户端服务器程序。 我已经创build了UDP套接字。 客户端使用广播消息 sendto(clientsock, buf, 100, 0, (struct sockaddr *)&to, sizeof (to)); 服务器使用接收广播的消息 recvfrom(serversock, buf, 100, 0, (struct sockaddr *)&rcv,&size); 该消息正被服务器成功接收。 在服务器端,我需要find收到消息的源IP地址。 我怎样才能做到这一点 ?

使用gcc版本4.1.2来模拟is_pointer

我想知道是否可以在CentOS 5.5版本的gcc 4.1.2上模拟boost,tr1 is_pointerfunction。 如果可能的话,我会欢迎有关如何做到这一点的build议?

任何人都可以解释这个晦涩的行为?

我正在编写一个安全课程的端口扫描器。 我决定写在Linux上的C,因为我从来没有做过任何与Java以外的networking相关的东西。 我在Ubuntu 10.10上使用GCC 4.4.5。 我有一个主函数分析参数,然后用结果variables调用扫描函数。 这是我的完整程序: http : //pastebin.com/DHU7SEQR 我遇到的问题是,它不能正常工作(它报告所有端口都是打开的),除非我打印出调用函数之前从用户接收的variables(或重新排列传递给可执行文件的参数的顺序) ,这对我来说绝对没有意义。 注意注释掉的行(150),将这行注释掉并且用命令编译 gcc scanner.c -o scanner 然后用程序运行 ./scanner -a 127.0.0.1 -b 0 -e 1000 -t 1000 导致它报告所有的端口被打开。 但是,取消该行的注释(即在调用函数之前打印所有variables)会导致端口状态正确报告。 重新排列参数的顺序 ./scanner -b 0 -e 1000 -t 1000 -a 127.0.0.1 似乎也是如此,就像在每个case块中添加printf语句一样(即使不打印variables本身)。

有效切换堆栈

由于某种原因,我切换堆栈以调用应用程序中的某些function。 为此,我使用了makecontext / getcontext / swapcontext 。 不过,我觉得这太慢了。 我试图使用自定义的代码来保存堆栈指针和其他寄存器,然后将堆栈指针指向我想用作堆栈的新内存的值。 但是,我不断得到堆栈粉碎检测到的错误。 他们是否为操作系统的堆栈设置了一些特殊的权限,或者这里有什么问题? 如何规避这个问题。

为什么fopen(“any_path_name”,“r”)不能返回NULL?

在debugging一些代码时,我得到如下所示: #include<stdio.h> int main() { FILE *fb = fopen("/home/jeegar/","r"); if(NULL == fb) printf("it is null"); else printf("working"); } 这里fopen我给了一个有点有效的path名称,但不是一个文件名。 不应该fopen返回NULL呢? 但它不会返回null! 编辑: 如果我在fopen中给出path of valid directory那么它将打印working : 如果我在fopen中给出path of invalid directory那么它将打印it is null 编辑: spec说 Upon successful completion, fopen() shall return a pointer to the object controlling the stream. Otherwise, a null pointer shall be […]

GCC编译器是否支持经典的C ++?

这个问题与移植一个HP-UX可执行文件的过程有关。 在HP-UX上,使用HP-UX ACC编译器编译和链接可执行文件。 考虑到编译器早在1996年,似乎并不支持标准的C ++(今天使用的C ++标准)。 而是根据HP-UX调用经典C ++的C ++标准进行编译。 我想知道GCC是否支持经典的C ++选项? 谢谢。

在64位体系结构上编译库:不正确的寄存器`%rax'与'l'后缀一起使用

我必须在64位体系结构上编译一个库,无论如何,我得到这个错误。 受错误影响的代码行是汇编器,下面是一个例子(它们都非常相似): //=== get the index to write ===/// __asm__ __volatile__ ("lock; xaddl %0,%1" : "=r" (indexToWrite), "=m" ( indexTable[entityId] ) : "0" (1), "m" ( indexTable[entityId] )); 你能帮我吗? 我在linux下64位(ubuntu),我使用的是gcc。

Linux内核中ATOMIC_INITmacros的用途

我在线阅读Linux设备驱动程序第三版 ,并且无法理解primefacesvariables的初始化macros: static atomic_t foobar = ATOMIC_INIT(1); 我已经浏览了Linux内核v3.2的源代码,但是我只提出了两个定义: #define ATOMIC_INIT(i) { (i) } 和 #define ATOMIC_INIT(i) ((atomic_t) { (i) }) macros的定义的第二个版本似乎在function上与第一个版本相同 – 实际上,即使有明确的转换,当该值仍然隐式地转换为atomic_t时,似乎是多余的。 为什么有两个版本的定义? ATOMIC_INITmacros的目的是为了防止未来版本的Linux内核中的atomic_t结构发生变化时,代码不会中断吗?