0

.cu ファイルに "json/json.h" を #include してから make を実行しようとすると、次のエラーが発生します。

nvcc -o sound main.o process.o -L /usr/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -O3 -arch=sm_20 -Xcompiler -Wall -Xcompiler -Wextra -m64

/usr/local/cuda/bin/crt/link.stub:90:13: 警告: 'void __cudaRegisterLinkedBinary(const __fatBinC_Wrapper_t*, void (*)(void**), void*)' が定義されていますが、使用されていません [-Wunused -関数]

process.o: 関数 `count_tracks()' 内:

tmpxft_00006061_00000000-3_process.cudafe1.cpp:(.text+0x75): 「Json::Value::Value(Json::ValueType)」への未定義の参照

tmpxft_00006061_00000000-3_process.cudafe1.cpp:(.text+0x7d): `Json::Value::~Value()' への未定義の参照 collect2: ld が 1 の終了ステータスを返しました make: *** [student] エラー 1

Json::Value を作成しようとするときを参照してください。私は JsonCpp ライブラリをリンクする場所を移動しようとしましたが、プロジェクトの main.cpp に jsoncpp を含めて Json::Value を作成しても、この問題は発生しませんでした。.cu ファイルでは正しく動作していないようです。

これは、Udacity の CUDA コースから取得し、ニーズに合わせて変更した Makefile からの適切なものです。

NVCC=nvcc
CXX = g++
LDFLAGS = -L ~/parallelcomputing/soundcloud/jsoncpp/build/debug/lib -ljsoncpp
INC = -I ~/parallelcomputing/soundcloud/jsoncpp/include
OPENCV_LIBPATH=/usr/lib
OPENCV_INCLUDEPATH=/usr/include
OPENCV_LIBS=-lopencv_core -lopencv_imgproc -lopencv_highgui

CUDA_INCLUDEPATH=/usr/local/cuda/include

NVCC_OPTS=-O3 -arch=sm_20 -Xcompiler -Wall -Xcompiler -Wextra -m64

GCC_OPTS=-O3 -Wall -Wextra -m64

student: main.o process.o Makefile
    $(NVCC) -o sound main.o process.o -L $(OPENCV_LIBPATH) $(OPENCV_LIBS) $(NVCC_OPTS)

main.o: main.cpp
    g++ -c main.cpp $(GCC_OPTS) $(LDFLAGS) $(INC) -I $(CUDA_INCLUDEPATH) -I $(OPENCV_INCLUDEPATH)

process.o: process.cu
    nvcc -c process.cu $(NVCC_OPTS) $(LDFLAGS) $(INC)

clean:
    rm -f *.o *.png hw
4

1 に答える 1