2017-02-15 28 views
-1

Я пытаюсь создать файл mex из октавы, но я борюсь с пробелами, содержащимися в пути. Я пробовал следующую команду:Создайте файл mex из Octave CLI

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 (с помощью команды окна. линия). Я попытался с одинарной кавычки, двойные кавычки и т.д. ... но все еще получаю те же ошибки.

"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'. Это может решить вашу проблему. Кроме того, вы пробовали сингл '' 'вместо double' ''? –

+0

Попробуйте: '' -LC: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v8.0 \ lib \ x64'', взятый из [Matlab Mex Справка] (https://se.mathworks.com/help/matlab/ref/mex.html) –

+0

Да, я попробовал '-LC: \ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v8.0 \ lib \ x64 'и single' вместо double ', но он все равно не передает путь правильно. Я буду исследовать, используя ответ каравандруга. –

ответ

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 АМС для поддержки разделителей файлов Unix даже на системах Windows, где файл Сепаратор не запускается последовательность эвакуации:

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, и он успешно работал. Спасибо за конструктивный ответ, это помогло! –