-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
compile failed with error "error: macro "__has_attribute" requires an identifier" #1693
Comments
谢谢反馈,该问题是因为在编译时指定了选项 -D__const__= 导致的,brpc在编译时需要添加这个宏来避免gcc对errno宏做优化从而导致未定义行为 你的系统文件(/usr/include/x86_64-linux-gnu/sys/cdefs.h) 在 #if 中测试了 ps:提issue的时候可以预览一下,编译错误里的 |
谢谢快速反馈,issue格式已修正。 |
Does this issue has new update? |
在使用 brpc 的代码中,全面关闭 const 优化是极为不负责任的做法,这么粗暴的绕过问题,会让人对 brpc 的代码质量产生疑虑,阻碍 brpc 的推广。
|
这个方案在 https://github.com/apache/incubator-brpc/blob/master/src/bthread/errno.h 已经实现了。问题在于,不只是brpc自身代码在使用errno时需要include "bthread/errno.h", 用户代码里也要加,包括用户通过第三方库间接使用到errno的情况。除了errno,还有pthread_self等函数也需要处理,这样搞很容易疏漏,导致未定义的行为,而且难以追查。 给glibc报bug的方案,我再看看 |
查了一些资料。目前找到的比较充分的讨论是LLVM社区的这个讨论:[llvm-dev] [RFC] Coroutine and pthread_self 讨论中提到的一些问题:
讨论的几种解决方案:
目前,LLVM社区有一些PR在尝试解决这个问题: 其它相关讨论: |
不是很理解仅仅删除这个编译优化提示 ARM Compiler 的文档说得更清楚,只有函数的返回值只依赖其输入参数时才可以使用 |
用到__atrribute((const))的地方很多,不只是glibc,其它库也可能会用到,哪些该删哪些不该删,需要一个一个排查。
这个描述确实比gcc的文档清楚些,但估计看这个文档的人不多。。 |
Describe the bug (描述bug)
compile failed with error "error: macro "__has_attribute" requires an identifier".
To Reproduce (复现方法)
follow the steps:
https://github.com/apache/incubator-brpc/blob/master/docs/cn/getting_started.md#ubuntulinuxmintwsl
Expected behavior (期望行为)
compile successful.
Versions (各种版本)
OS: ubuntu 21.10
Compiler: gcc 11.2.0
brpc: 1.0.0
protobuf: libprotoc 3.12.4
Additional context/screenshots (更多上下文/截图)
test@NUC11PAHi7:
~
/github/brpc$ cd incubator-brpc-1.0.0/test@NUC11PAHi7:
~
/github/brpc/incubator-brpc-1.0.0$ sh config_brpc.sh --headers=/usr/include --libs=/usr/libtest@NUC11PAHi7:
~
/github/brpc/incubator-brpc-1.0.0$ maketest@NUC11PAHi7:
~
/github/brpc/incubator-brpc-1.0.0$ uname -atest@NUC11PAHi7:
~
/github/brpc/incubator-brpc-1.0.0$ gcc --versiontest@NUC11PAHi7:~/github/brpc/incubator-brpc-1.0.0$ cat /etc/issue
The text was updated successfully, but these errors were encountered: