2010-09-09 4 views
1

Компиляция версии aircrack-ng, поддерживающей CUDA, которая не была исправлена ​​ошибкой через некоторое время, поэтому потребовалось немного исправления, чтобы получить больше всего.Подстановка переменной Makefile иногда игнорируется

В принципе, make не может найти соответствующий компилятор (nvcc) для этой части кода;

Релевент Makefile раздел

ifeq ($(CUDA), true) 
CFLAGS += -DCUDA_ENABLED 

NVCC := $(CUDA_BIN)/nvcc 
INCLUDES += -I. -I$(CUDA_INSTALL_PATH)/include 
COMMONFLAGS += $(INCLUDES) -DUNIX 

NVCCFLAGS += --compiler-options -fno-strict-aliasing --host-compilation=C $(COMMONFLAGS) 

# Change this only if you have COMPUTE > 1.0 
NVCCFLAGS += -maxrregcount 12 

# Enable this for extra compiler and as output 
#NVCCFLAGS += --ptxas-options "-v" --verbose 

LIBSSL += -L$(CUDA_INSTALL_PATH)/lib -L$(CUDA_INSTALL_PATH)/lib64 -lcuda -lcudart 

%.o : %.cu 
    $(NVCC) $(NVCCFLAGS) $(SMVERSIONFLAGS) -o [email protected] -c $< 
endif 

Соответствующие Сделать выход

/nvcc --compiler-options -fno-strict-aliasing --host-compilation=C -I. -I/include -DUNIX -maxrregcount 12 -o cudacrypto.o -c cudacrypto.cu 
make[1]: /nvcc: Command not found 
make[1]: *** [cudacrypto.o] Error 127 
make[1]: Leaving directory `/home/bolster/src/aircrack-ng-cuda/src' 
make: *** [install] Error 2 

Как вы можете видеть, что это выглядит, как сделать это, сбросив переменных среды, 'CUDA_BIN'.

Выход echo $CUDA_BIN

/usr/local/cuda/bin 

Выход which nvcc

/usr/local/cuda/bin/nvcc 

Я не заставлю-гуру на любом участке, так что, если я делаю что-то явно, очевидно, неправильно, прости меня.

После попытки жесткого кодирования флага nvcc с полным путем этот раздел компилируется, но когда дело доходит до раздела криптографии (с использованием libssl), он не может найти необходимые библиотеки, и так же, как выше, не заменяет 'CUDA_INSTALL_PATH', хотя он находится в среде, что указывает на то, что происходит что-то странное.

+0

Не совсем уверен, если это имеет значение в качестве решения или «обходной путь», но если make запускается встроенным с назначением, например «CUDA_INSTALL_PATH =/.../make», то этот раздел работает, но его не «красивое» решение – Bolster

+0

Является ли экспортированная оболочка переменной CUDA_BIN или она просто обычная переменная оболочки, не видимая подпроцессам (т. е. сделать)? В bash, посмотрите на вывод экспорта. – bobbogo

ответ

1

Обычно это не очень хорошая идея полагаться на переменные окружения в make-файле. Сделать значение явным в make-файле или указать его в вызове (например, make CUDA=...) - фактически правильный путь.

Если вы все еще хотите использовать значение из окружающей среды, я не знаю, почему ваш Makefile не работает, но вы можете попробовать это:

CUDA_BIN := $(shell echo $$CUDA_BIN) 
+0

Этот способ работал, но если явное объявление - это правильный путь, то ответ на мой вопрос. – Bolster

Смежные вопросы