2017-02-15 32 views
-1

我想從八度音程中創建一個mex文件,但我正在使用包含在路徑中的空間掙扎。我試過以下命令:從Octave CLI構建mex文件

mex 'tsne_p.o' 'nvmatrix.o' 'nvmatrix_kernel.o' -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" -lcuda -lcudart -lcufft -lcublas -I. -Wl,-rpath,"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" 

不幸的是,路徑被分成多個部分。 這裏是日誌:

g++: error: Files/NVIDIA: No such file or directory 
g++: error: GPU: No such file or directory 
g++: error: Computing: No such file or directory 
g++: error: Toolkit/CUDA/v8.0/lib/x64: No such file or directory 
g++: error: unrecognized command line option '-Wl' 
warning: mkoctfile exited with failure status 
warning: called from 
    mkoctfile at line 171 column 5 
    mex at line 29 column 18 
error: 'rpath' undefined near line 1 column 169 

我試圖取代「通過」,但它並沒有改變任何東西

我終於嘗試直接mex.m名爲.exe文件(使用Windows命令來調用。線)。我試着用單引號,雙反斜線等...但仍然得到同樣的錯誤。

"C:\Octave\Octave-4.0.0\bin\mkoctfile-4.0.0.exe" "--mex" "tsne_p.o" "nvmatrix.o" "nvmatrix_kernel.o" -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" -lcuda -lcudart -lcufft -lcublas -I. -Wl,-rpath,"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" 

g++: error: Files\NVIDIA: No such file or directory 
g++: error: GPU: No such file or directory 
g++: error: Computing: No such file or directory 
g++: error: Toolkit\CUDA\v8.0\lib\x64: No such file or directory 
g++: error: Files\NVIDIA: No such file or directory 
g++: error: GPU: No such file or directory 
g++: error: Computing: No such file or directory 
g++: error: Toolkit\CUDA\v8.0\lib\x64: No such file or directory 
+0

我不知道這是如何工作的八度,但在MATLAB,你可以設置默認路徑,CUDA(和其他東西)在一個'xml'文件中。這可能會解決你的問題。此外,您是否嘗試過使用'''而不是雙'''' –

+0

嘗試:''-LC:\ Program Files \ NVIDIA GPU計算工具包\ CUDA \ v8.0 \ lib \ x64'',取自[Matlab Mex幫助](https://se.mathworks.com/help/matlab/ref/mex.html) –

+0

是的,我試過'-LC:\ Program Files \ NVIDIA GPU計算工具包\ CUDA \ v8.0 \ lib \ x64 '和單一'而不是雙重「,但它仍然沒有正確地通過路徑。我將使用carandraug的答案進行調查。 –

回答

0

你可以看到自己是什麼,通過檢查你實際上是在傳遞什麼樣的參數,以MEX發生(記住mex就像任何其他Octave函數一樣,輸入which mex找到,你可以看到它的來源):

octave> function show_args (varargin), disp (varargin); endfunction 
octave> show_args 'tsne_p.o' 'nvmatrix.o' 'nvmatrix_kernel.o' -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64" 

{ 
    [1,1] = tsne_p.o 
    [1,2] = nvmatrix.o 
    [1,3] = nvmatrix_kernel.o 
    [1,4] = -LC:Program FilesNVIDIA GPU Computing ToolkitCUDA 
                  8.0libd 
} 

你可以看到,問題是,你是不是正確地傳遞路徑,沒有文件分隔符。原因是您在該路徑字符串中使用了雙引號,其中使用了間隙來輸入escape sequences。特別有趣的是\v這是一個垂直的標籤這就是爲什麼8.0libd是否顯示在下一行:

[1,4] = -LC:Program FilesNVIDIA GPU Computing ToolkitCUDA 
                  8.0libd 

您可以使用單引號或者解決這個(不支持轉義序列):

octave> show_args -L'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64' 

{ 
    [1,1] = -LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 
} 

或逃避反斜槓:

octave> show_args -L"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0\\lib\\x64" 

{ 
    [1,1] = -LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 
} 

我不是一個Windows用戶,因此我不知道下面的,但它是常見的Unix PROGR AMS支持,甚至在Windows系統上,該文件分隔符不啓動一個轉義序列的Unix文件分隔符:

octave> show_args -L"C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64" 

{ 
    [1,1] = -LC:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64 
} 
+0

我最終使用了Matlab而不是Octave,並且它成功地運行了。感謝您的建設性答案,它有幫助! –