2017-05-11 7 views
0

私はOmpを使用して私の研究のための 'C'並列プログラミングに取り組んでいます。C - 参照されていないOmp関数

/*This header file provides a function double hpc_gettime() that returns the elaps 
ed time (in seconds) since "the epoch". The function uses the timing routing of th 
e underlying parallel framework (OpenMP or MPI), if enabled; otherwise, the defaul 
t is to use the clock_gettime() function. 

IMPORTANT NOTE: to work reliably this header file must be the FIRST header file th 
at appears in your code.*/ 

#ifndef HPC_H 
#define HPC_H 
#if defined(_OPENMP) 
#include <omp.h> 
/* OpenMP timing routines */ 

double hpc_gettime(void) 
{ 
    return omp_get_wtime(); 
} 

#elif defined(MPI_Init) 
/* MPI timing routines */ 
double hpc_gettime(void) 
{ 
    return MPI_Wtime(); 
} 

#else 
/* POSIX-based timing routines */ 
#if _XOPEN_SOURCE < 600 
#define _XOPEN_SOURCE 600 
#endif 
#include <time.h> 

double hpc_gettime(void) 
{ 
    struct timespec ts; 
    clock_gettime(CLOCK_MONOTONIC, &ts); 
    return ts.tv_sec + (double)ts.tv_nsec/1e9; 
} 
#endif 
#endif 

:私のモジュール配列和-parallel.cでは、私は私のCファイルと同じフォルダにあり、次のコードが含まれているとして、第1、要求されたとして、ファイルhpc.hが含まれますそれから私はomp.h、stdio.hに、STDLIB.Hが含まれ、私はgccの-c -Wall -Wpedantic -fopenmpでコンパイルし、それは大丈夫だが、私はgcc -o -fopenmp array-sum-parallel array-sum-parallel.oにリンクするとき、私はこのエラーを取得: array- sum-parallel.c :(。テキスト+ 0x9):omp_set_num_threadsへの定義されていない参照と他のすべてのOmp関数。どうして?

+2

出力ファイルはまだリンクされていません。あなたがコンパイルして1つのステップでリンクしたい場合の最も簡単な解決方法は、 '-c'を省略します。 –

+2

私はあなたが' gcc -c -Wall -Wpedantic -fopenmp'から得たファイルをどのプラットフォームでも*実行できないことを100%確信しています。それをリンクしようとしたらどういう意味ですか? –

+0

@AjayBrahmakshatriyaはい、申し訳ありませんがリンクを意味します。私はその質問を編集した。 – Caramelleamare

答えて

1

あなたはOMPライブラリを使用してコンパイルしたファイルをリンクする必要があり、あなたがコンパイルする++グラム使用することができますし、1つのコマンドでリンク:、gcc` `へ` -c`フラグのみコンパイル段階を行い

g++ -o sum-parallel sum-parallel.c -fopenmp 
+0

問題はリンクフェーズであり、実行可能ファイルではないことが明らかになっているので、私は質問を編集しました。あなたのコードは 'gcc -c ...'の後に 'gcc -o array-sum array-sum-parallel.o fopenmp'を使った場合と同じように動作します。なぜ_fopenmp_が最後のフラグである必要がありますか? – Caramelleamare

+1

これは最初のフラグであり、制限はありません –

+0

しかし、このように 'gcc -o -fopenmp array-sum-array-sum-parallel.o''はファイル' array-sum'が存在しないことを示しています。 このようにして 'gcc -o array-sum array-sum-parallel.o -fopenmp'しても問題ありません。 – Caramelleamare

関連する問題