用ubuntu中的cuda编译opencv的makefile停止工作

时间:2012-08-13 06:14:57

标签: ubuntu opencv makefile cuda

我正在尝试在笔记本电脑上编译一个项目,我需要CUDA和opencv。 所以我创建了3个文件

的main.cpp

kernel.cu

kernel.h当

在main.cpp中我有opencv代码,在kernel.cu中我有我的内核。 我正在使用我在另一个项目中找到的makefile:

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 opencv main.o kernel_gpu.o -o grayscale

     

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 :(文本 Z10cudaLaunchIcE9cudaErrorPT [cudaError cudaLaunch(字符*)] + 0×14):未定义参考`cudaLaunch'

     

collect2:ld返回1退出状态

     

make: * [all]错误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

1 个答案:

答案 0 :(得分:1)

你能尝试将所有-l选项放在kernel.o后面吗?

祝你好运!