4

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でコンパイルするときに、何が欠けているか、間違っているのですか?

4

3 に答える 3

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

昔々、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
于 2013-05-12T23:41:58.153 に答える
1

コードにプラグマ ディレクティブを追加することで、Windows 上の cuBLAS にリンクすることができました。

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

これは OpenCV でも機能する可能性があります。ただし、これは非移植性であることに注意してください。

于 2013-05-14T16:56:01.310 に答える