Linux GCC编译

一:makefile文件

二:for循环里不能定义int i之类的事情   后面添加  -std=c99

三:bash: ./PAuth.out: Permission denied 运行不了程序结果 

      解决方法: chmod 777 要运行的文件

四:

由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:

         undefined reference to 'pthread_create'

undefined reference to 'pthread_join'


问题原因:

    pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。


问题解决:

    在编译中要加 -lpthread参数

    gcc thread.c -o thread -lpthread

    thread.c为你些的源文件,不要忘了加上头文件#include<pthread.h>                                                                                                    


五:

Segmentation fault (core dumped)指针和内存问题

指针为被分配内存就使用 

六:

passing argument 3 of ‘pthread_create’ from incompatible pointer type 虽然是警告但是最好没有

note: expected ‘void * (*)(void *)’ but argument is of type ‘void * (*)(void **)’

        解决办法:这句话表明pthread_create 的第三个参数是不兼容的指针参数,强制转换一下即可 从note内容来看

        用(void *)强制转换                                                                              

七:

Linux 带参数的主函数   运行时: ./参数名(对应argv[0],包含./)  第一个参数(对应argv[1])后面以此类推

	int main(int argc,char* argv[]);
	argv是命令行参数个数 不带参运行 argc值为1

	argv是命令行参数
	argv[0]代表程序本身
	argv[1]代表第一个参数
	以此类推

八:

使用动态库:命令行 gcc  xxx.c  -o xxxx -L  动态库目录 -l 动态库名称

说明:

     –L:指明动态库所在的目录

      -l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-l test 

九:

调试的时候,使用man命令查找编译器不能识别的C语言库函数,查找完之后 按q跳出


十:打印错误:

                     strerrno(errno)

11:

nohup  ./程序名 


12:

 出现错误  *** glibc detected *** ./server: double free or corruption (!prev)

  多次fclose 文件流

你可能感兴趣的:(Linux GCC编译)