2

Einaライブラリのファイルモジュールと古典的なシステムコールで遊んでみました。私の問題は、ftw.h の eina といくつかの関数と定数を使用したい場合です。

最初の簡単なコードは次のとおりです。

#define _XOPEN_SOURCE 500 /*Get nftw() and S_IFSOCK declarations*/              
#include <ftw.h>                                                                
#include <stdio.h>                                                              
#include <stdlib.h>                                                             
#include <Eina.h>                                                               
/*Compile with                                                                  
gcc -o eina_ftw eina_ftw.c $(pkg-config --libs --cflags eina)                   
*/                                                                              
int main(int argc, char **argv)                                                 
{                                                                               
  int a = FTW_DNR;                                                              
  int b=0;                                                                      
  b = FTW_MOUNT;                                                                
  printf("ok\n");                                                               
  exit(EXIT_SUCCESS);                                                           
}

コンパイルすると、次のエラーが発生します。

In file included from /usr/include/eina-1/eina/eina_lock.h:50:0,
                 from /usr/include/eina-1/Eina.h:259,
                 from eina_ftw.c:5:
 /usr/include/eina-1/eina/eina_inline_lock_posix.x:57:1: erreur: unknown type name   thread_spinlock_t’
typedef pthread_spinlock_t Eina_Spinlock;
^
/usr/include/eina-1/eina/eina_inline_lock_posix.x:561:4: erreur: unknown type name ‘pthread_barrier_t’
pthread_barrier_t barrier;
^

わかりましたので、これを試しました:

#include <Eina.h>  
#define _XOPEN_SOURCE 500 /*Get nftw() and S_IFSOCK declarations*/              
#include <ftw.h>                                                                
#include <stdio.h>                                                              
#include <stdlib.h>                                                             

/*Compile with                                                                  
gcc -o eina_ftw eina_ftw.c $(pkg-config --libs --cflags eina)                   
*/                                                                              
int main(int argc, char **argv)                                                 
{                                                                               
  int a = FTW_DNR;                                                              
  int b=0;                                                                      
  b = FTW_MOUNT;                                                                
  printf("ok\n");
  exit(EXIT_SUCCESS);                                                           
}

そして今、私はこの種のエラーがあります:

eina_ftw.c: In function ‘main’:
eina_ftw.c:13:7: erreur: ‘FTW_MOUNT’ undeclared (first use in this function)
   b = FTW_MOUNT;
       ^
eina_ftw.c:13:7: note: each undeclared identifier is reported only once for each function it appears in

それで、この問題を解決する方法があるかどうか知りたいですか?

4

1 に答える 1

3

設定_XOPEN_SOURCE 500は、1995 POSIX 宣言を要求する (とほぼ同等) です。

少なくとも 600 (POSIX 2001 の場合) またはおそらく 700 (POSIX 2008 の場合) に設定します。

もちろん、厳密には_XOPEN_SOURCE、Open Group (元は X/Open) Single Unix 仕様の特定のバージョンを設定する必要がありますが、POSIX 標準と Open Group 標準の間には強い関係があります。詳細については、次を参照してください。

于 2014-01-17T15:03:05.013 に答える