長くてすみません。gccで以下のソースをコンパイルするとき -I./include をつけると構文解析
エラーが出てしまいます。(以下のソースではヘッダファイルを必要とする部分が端折ってあるので
付ける必要はありませんが、本当は独自のヘッダをインクルードしています。ただし、エラーが出
るのはどちらも一緒)
man gcc を見ると -Iオプションは指定されたディレクトリをヘッダファイルの検索パスに追加
するとありますが、これを指定すると既存の検索パスを無視するかのように振舞います。
-I./includeなんて単純な指定はMakefileで一般的だと思うのですが、何か対策はありませんか?
test.c
#include <string.h> /* stdio.hをincludeしても変化なし。 */
#ifndef __USE_XOPEN /* unistd.hの直前で定義しないとundefされ crypt()で警告がでる */
#define __USE_XOPEN
#endif
#include <unistd.h>
#include <pthread.h> /* */
pthread_mutex_t _passwd_t = PTHREAD_MUTEX_INITIALIZER;
int is_match_passwd(char *usrnamesrc, char *usrnamedst, char *passwdsrc, char *passwddst)
{
char salt[3], passwd[80], *passwd_encoded;
salt[0] = passwddst[0]; salt[1] = passwddst[1]; salt[2] = 0;
pthread_mutex_lock(&_passwd_t); /* OSの領域?なのでロックしてみる */
passwd_encoded = crypt(passwdsrc, salt);
strncpy(passwd, passwd_encoded, 76);
passwd[79] = 0;
pthread_mutex_unlock(&_passwd_t); /* アンロック */
if ( (strcmp(passwd, passwddst) == 0) && (strcmp(usrnamesrc, usrnamedst) == 0) ){
return 0;
}
return -1;
}
続き
$ gcc test.c -I./include -c
In file included from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.1/include/pthread.h:664,
from test.c:6:
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.1/include/bits/sigthread.h:41: error: 構文解析エラー before '*' token
ちなみに、gcc -v はこうなってます。
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.1/specs から spec を読み込み中
コンフィグオプション: ../configure --prefix=/usr --enable-threads=posix --enable-languages=c,c++,java
スレッドモデル: posix
gcc バージョン 3.3.1