[英]How can I remove the VS warning C4091: 'typedef ' : ignored on left of 'SPREADSHEET' when no variable is declared
[英]Makefile variable substitution sometimes ignored
编译启用了 CUDA 的 aircrack-ng 版本有一段时间没有修复错误,因此需要一些补丁才能完成大部分工作。
基本上,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 $@ -c $<
endif
相关 Make 输出
/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
如您所见,make 似乎正在删除环境变量“CUDA_BIN”。
echo $CUDA_BIN
的输出
/usr/local/cuda/bin
which nvcc
的输出
/usr/local/cuda/bin/nvcc
无论如何,我都不是化妆大师,所以如果我做的事情明显是错误的,请原谅我。
在尝试使用完整路径对 nvcc 标志进行硬编码后,该部分会编译,但是当涉及到加密部分(涉及 libssl)时,它找不到必要的库,并且以与上述类似的方式不会替换“CUDA_INSTALL_PATH”,即使它在环境中,这表明正在发生一些奇怪的事情。
在 makefile 中依赖环境变量通常不是一个好主意。 在 makefile 中显式指定值,或在调用中指定它(例如make CUDA=...
)实际上是正确的方法。
如果您仍想使用环境中的值,我不知道为什么您的 makefile 不起作用,但您可以尝试以下操作:
CUDA_BIN := $(shell echo $$CUDA_BIN)
如果环境变量已被导出,则只能在 Makefile 中使用它们。 即如果你这样做:
export CUDA_BIN=/usr/local/cuda/bin
更基本的命令CUDA_BIN=/usr/local/cuda/bin
将导致命令echo $CUDA_BIN
的正确结果,但不能确保 Makefile 可以访问该变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.