私はメインのコードウィッヒは、いくつかのライブラリを使用して持っていると私はこのようにそれをコンパイルされて:今、私は私がコンパイルできるか、mainCodeでCUDAコードを追加して.cuために、その拡張子を変更し...だからいるCヘッダとCUDAコードでCコードをコンパイルするには?
gcc importedCFile1.c importedCFile2.c mainCode.c -O3 -lm -Wall -o maincode -lrt
全部?
私が試した:
nvcc importedCFile1.c importedCFile2.c mainCode.cu -o maincode
を私はインポートされたCファイルで私の機能に「未定義の参照」の多くを得ました。
extern "C" {
#include "importedCFile1.h"
#include "importedCFile2.h"
}
そして'importedCFile1.c'が'importedCFile2.c'と'mainCode.cu'で宣言されたいくつかの関数と変数を使用している:私は使用しています私のCファイルをインクルードする
このように:
extern int **se; // Variables from mainCode
extern int *n;
extern int numNodes;
extern int *getVector(int n); // Function from mainCode
extern int iRand(int high); // Function from importedCFile2
この関数は未定義の参照の原因です。私は何をすべきか?
また、-lrt
、O3
、lm
、Wall
など、Cコードに必要なフラグを追加するにはどうすればよいですか?
EDIT:あなたはここでの問題の減少例を見つけることができます:あなたはgccでmainCode.cとimportedCFile.cをコンパイルする場合
https://github.com/mvnarvaezt/cuda/tree/master/minimalExample
はそれが正常に動作します。 mainCode.cuとimportedCFile.cをnvccでコンパイルすると、anExample()(importedCFile.cの関数)への未定義のリファレンスが得られます。
あなたは、ヘッダーにimportedCFile.cをインポートし、それが動作するanExampled()関数の呼び出しをコメントします。
ヘッダファイルに 'extern" C "{#include ...}'を含めてラップします。さもなければ、関数名はC++規則に従ってマングルされます。 – tera
@teraでしたが、'importedCFile1.c 'では'importedCFile2.c'と'emainCode.cu 'の関数と変数も使用されていますが、それらには "未定義参照"があります。 私は'importedCFile1.c 'のようなものを持っています: extern int * getVector(int n); //これはmainCode.cuの関数です extern int iRand(int high);これはmainCode.cuの関数です。 //これはimportedCFile2.cの関数です – user3117891
これはうまくいくはずです。問題を示すためのコードをいくつか示してください。 – tera