0

CUDA と opencv の両方が必要なラップトップでプロジェクトをコンパイルしようとしています。だから私は3つのファイルを作成しました

main.cpp

kernel.cu

カーネル.h

main.cpp には opencv コードがあり、kernel.cu にはカーネルがあります。別のプロジェクトで見つけたこのメイクファイルを使用しています。

CXX=g++
CUDA_INSTALL_PATH=/usr/local/cuda
CFLAGS= -I. -I$(CUDA_INSTALL_PATH)/include `pkg-config --cflags opencv`
LDFLAGS= -L$(CUDA_INSTALL_PATH)/lib64 -lcudart `pkg-config --libs opencv`

all:
    $(CXX) $(CFLAGS) -c main.cpp -o main.o
    nvcc $(CUDAFLAGS) -arch="sm_21" -c kernel.cu -o kernel.o
    $(CXX) $(LDFLAGS) main.o kernel.o -o main

私はopencv 2.4.2、CUDA 4.0、およびgcc 4.4を使用して別のコンピューターで同じプロジェクトを試しましたが、正常に機能しましたが、opencv 2.4.2、CUDA 4.2、およびgcc 4.6を使用してラップトップで試してみると、最後の行ですが、main.o と kernel.o が作成されます。最後の行をコメントアウトしてもエラーにはなりません。

opencv と cuda sdk の両方のサンプルをビルドして実行しましたが、別々に問題なく動作しました。手伝って頂けますか?

返されるものは次のとおりです。

g++ -L/usr/local/cuda/lib64 -lcudart pkg-config --libs opencvmain.o kernel_gpu.o -o グレースケール

main.o: 関数 `main' 内:

main.cpp:(.text+0x44): `cv::imread(std::basic_string, std::allocator > const&, int)' への未定義の参照

main.cpp:(.text+0x72): `cv::_InputArray::_InputArray(cv::Mat const&)' への未定義参照

main.cpp:(.text+0xa6): `cv::imshow(std::basic_string, std::allocator > const&, cv::_InputArray const&)' への未定義の参照

main.cpp:(.text+0xc8): `cv::waitKey(int)' への未定義の参照

main.o: 関数 `cv::Mat::~Mat()' 内:

main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): `cv::fastFree(void*)' への未定義の参照

main.o: 関数 `cv::Mat::release()' 内:

main.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): `cv::Mat::deallocate()' への未定義の参照

kernel_gpu.o: 関数cuda_BGsub': tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x41): undefined reference to内 cudaConfigureCall'

kernel_gpu.o: 関数cuda_grayscale': tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0xb3): undefined reference to内 cudaConfigureCall'

kernel_gpu.o: 関数cuda_Filter': tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x10d): undefined reference to内 cudaConfigureCall'

kernel_gpu.o: 関数cuda_Noise_reduc': tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x176): undefined reference to内 cudaConfigureCall'

kernel_gpu.o: 関数cuda_RGB': tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x1d9): undefined reference to内 cudaConfigureCall'

kernel_gpu.o:tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x234): 「cudaConfigureCall」への未定義の参照が続きます

kernel_gpu.o: 関数 `__cudaUnregisterBinaryUtil()' 内:

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x409): `__cudaUnregisterFatBinary' への未定義の参照

kernel_gpu.o: 関数 `__device_stub__Z5BGsubPhS_S_iib(unsigned char*, unsigned char*, unsigned char*, int, int, bool)':

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x442): 「cudaSetupArgument」への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x465): 「cudaSetupArgument」への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x488): 「cudaSetupArgument」への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x4a7): 「cudaSetupArgument」への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x4c6): 「cudaSetupArgument」への未定義の参照

kernel_gpu.o:tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x4e5): 「cudaSetupArgument」への未定義の参照が続きます

kernel_gpu.o: 関数 ` sti_ _cudaRegisterAll_45_tmpxft_000016bc_00000000_4_kernel_gpu_cpp1_ii_cdcbb70e()' 内:

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0xe7e): `__cudaRegisterFatBinary' への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0xedc): `__cudaRegisterFunction' への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0xf29): `__cudaRegisterFunction' への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0xf76): `__cudaRegisterFunction' への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0xfc3): `__cudaRegisterFunction' への未定義の参照

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x1010): `__cudaRegisterFunction' への未定義の参照

kernel_gpu.o:tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(.text+0x105d): `__cudaRegisterFunction' への未定義の参照が続きます

kernel_gpu.o: 関数 `cudaError cudaLaunch(char*)' 内:

tmpxft_000016bc_00000000-1_kernel_gpu.cudafe1.cpp:(. text.Z10cudaLaunchIcE9cudaErrorPT [cudaError cudaLaunch(char*)]+0x14): 「cudaLaunch」への未定義の参照

collect2: ld が 1 つの終了ステータスを返しました

make: * [すべて] エラー 1

編集: このバージョンは動作します:

CXX=g++
CUDA_INSTALL_PATH=/usr/local/cuda
CFLAGS= -I. -I$(CUDA_INSTALL_PATH)/include `pkg-config --cflags opencv`
LDFLAGS= -L$(CUDA_INSTALL_PATH)/lib64 -lcudart `pkg-config --libs opencv`

all:
    $(CXX) $(CFLAGS) -c main.cpp -o main.o
    nvcc $(CUDAFLAGS) -arch="sm_21" -c kernel.cu -o kernel.o
    $(CXX)  main.o `pkg-config --libs opencv` -L$(CUDA_INSTALL_PATH)/lib64 -lcudart kernel.o -o main
4

1 に答える 1

1

すべての -l オプションを kernel.o の後ろに置いてみていただけますか?

よろしくお願いします!

于 2012-08-14T02:17:29.717 に答える