LoginSignup
0
0

More than 5 years have passed since last update.

CppUTest使用時、_GNU_SOURCE が利かなかった

Posted at

発生条件

  • CppUTestでメモリリークをチェックしたかったので強制インクルード-includeを使ってヘッダファイルを指定していた。
  • GNU非標準拡張のpthread_tryjoin_npを使用するため、ソースの先頭で#define _GNU_SOURCEと定義していた

現象

error: implicit declaration of function ‘pthread_tryjoin_np’

pthread_tryjoin_npが見つからないと言われる。
#include <pthread.h>よりも前に_GNU_SOURCEを定義してあるので使える筈なのに。

調査方法

  • 試しに#define _GNU_SOURCEをやめてコンパイルオプション-D_GNU_SOURCEを与えたらビルドできた
  • コンパイル時に-Eオプションをつけて、プリコンパイル時点でソースがどんな風に見えているかを調べた

判明した原因

_GNU_SOURCEは、間接的にインクルードされるfeatures.hよりも前に定義しておかなければ意味がない。
ソースの先頭で_GNU_SOURCEを定義していたが、-includeで与えたヘッダの延長でfeatures.hが読み込まれたため、_GNU_SOURCEが利かなくなっていた。

対処

コンパイルオプション-D_GNU_SOURCEをつけることにした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0