2013-03-16 36 views
4

我想編譯一個使用CUDA和OpenCV的程序。 我相信到OpenCV的路徑是正確的,因爲編譯一個簡單的OpenCV程序與此:鏈接錯誤OpenCV 2.4 + CUDA Windows 7(x64)命令行

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

任何人有任何想法?我真的不知道,也找不到爲什麼會發生這種情況。 – BRabbit27 2013-03-17 08:44:04

+0

有什麼想法?仍然在尋找這個工作! – BRabbit27 2013-04-22 13:41:23

+0

顯然,'cvLoadImage'確實位於'opencv_highgui240.lib'中(至少它在Linux的'libopencv_highgui.so'中)。此外,'-L'用於指定庫搜索路徑(例如''%OPENCV_DIR%\ x64 \ vc10 \ lib「),而您需要使用'-l'指定要在鏈接階段(沒有庫文件擴展名,例如'opencv_highgui240')。如果你不需要CLI編譯,你也可以按照說明[這裏](http://stackoverflow.com/questions/10831088/using-opencv-2-4-0-in-a-visual-studio-2010 -project/10838338#10838338)。 – BenC 2013-05-12 15:15:35

回答

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 
+0

請問,'--cl-version 2010'和'--use-local'的目的是什麼?我嘗試了這麼辛苦,但它仍然給我錯誤,'nvcc致命:無法在PATH中找到編譯器'cl.exe'。因此,我正在使用'-ccbin「C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin \ cl.exe」'。它解決了與查找路徑有關的問題,但是現在它給了我一個錯誤'nvcc致命:選項'--cl-version'需要使用選項'--use-local'來指定。 – skm 2015-06-26 11:38:35

1

在像第一個庫文件之前可能缺少-L

1

我只是能夠通過添加編譯指令,我的代碼在Windows上對CUBLAS鏈接:

#pragma comment(lib,"cublas.lib") 

這可能與OpenCV的正常工作。請注意,這是non-portable