Knighthana
文章95
标签138
分类7

文章归档

undefined reference to sem and stdout

undefined reference to sem and stdout

一个系统信号量相关函数的问题,一个stdout相关的问题

未定义的引用:sem函数(Undefined Reference to Sem_*)

GCC没有默认地支持C的API中的信号函数例如sem_init sem_post sem_wait (这很常见,GCC总是不会默认帮你加载所需的链接库)

直接gcc带有这些函数的代码,想都不用想,肯定会报

undefined reference to sem

的错误

解决这个问题需要给gcc带一个-pthread参数


标准输出stdout缓冲区flush的问题

在我设置的打印提示信息(fprintf(stderr, "info"))出现之前程序就段错误了,之前以为是打印的句子之前出现了错误,但是后来得证问题出在提示信息之后的语句中;

那为什么以前不出提示信息呢?

这个问题是打印错误信息的语句没有考虑到C缓冲区的问题,事实上C输出缓冲区只会在里面有\n,EOF,fflush(stdout),还有程序执行完毕的时候才会把缓冲区里面的内容打印出来,所以如果提示信息里面没有\n或者什么能清空缓冲区的东西,那么提示信息就会一直屯着,直到程序觉得可以输出了,那么如果在这之间程序出了问题,提示信息就永远不会打印出来,进而也会导致对出错位置判断失误

Knighthana

2019年06月05日 于西电