我正在尝试编译同时使用CUDA和OpenCV的程序。 我确信OpenCV的路径是正确的,因为编译一个简单的OpenCV程序:
cl /I"%OPENCV_DIR%\include" /LINK"%OPENCV_DIR%\x64\vc10\lib\opencv_core240.lib" "%OPENCV_DIR%\x64\vc10\lib\opencv_highgui240.lib" testCV.cpp
它成功编译了程序。现在,当我尝试使用NVCC编译时:
nvcc testCuda.cu --cl-version 2010 --use-local-env -I"%OPENCV_DIR%\include" -L"%OPENCV_DIR%\x64\vc10\lib\opencv_core240.lib" "%OPENCV_DIR%\x64\vc10\lib\opencv_highgui240.lib"
我在尝试链接时遇到错误:
error LNK2019: unresolved external symbol cvLoadImage referenced in function main
a.exe : fatal error LNK1120: 1 unresolved externals
使用NVCC编译时我错过了什么或做错了什么?
答案 0 :(得分:3)
-L
用于指定库目录,不是文件。
你可能想要执行:
nvcc testCuda.cu --cl-version 2010 --use-local-env -I"%OPENCV_DIR%\include" -L"%OPENCV_DIR%\x64\vc10\lib" -lopencv_core240 -lopencv_highgui240
如果这样做不起作用,请删除-l
并添加其扩展程序:
nvcc testCuda.cu --cl-version 2010 --use-local-env -I"%OPENCV_DIR%\include" -L"%OPENCV_DIR%\x64\vc10\lib" opencv_core240.lib opencv_highgui240.lib
Once upon a time,当我们有CUDA 2.x和OpenCV 2.1时,我写了一个 Makefile 来编译一个使用这两个框架的应用程序:
CXX=g++
CUDA_INSTALL_PATH=/usr/local/cuda
CFLAGS= -I. -I$(CUDA_INSTALL_PATH)/include -I/usr/include/opencv
LDFLAGS= -L$(CUDA_INSTALL_PATH)/lib -lcudart -L/usr/lib -lcxcore -lcv -lhighgui -lcvaux -lml
ifdef EMU
CUDAFLAGS+=-deviceemu
endif
all:
$(CXX) $(CFLAGS) -c main.cpp -o main.o -m32 -arch i386
nvcc $(CUDAFLAGS) -c kernel_gpu.cu -o kernel_gpu.o
$(CXX) $(LDFLAGS) main.o kernel_gpu.o -o grayscale -arch i386
clean:
rm -f *.o grayscale
答案 1 :(得分:1)
在第二个库文件之前可能缺少-L
,如第一个?
答案 2 :(得分:1)
我只能通过在我的代码中添加pragma指令来链接Windows上的cuBLAS:
#pragma comment(lib,"cublas.lib")
这也适用于OpenCV。但请注意,这是non-portable。