使用'
中的printf-like-function
格式说明符会导致警告。
class LogController
{
auto __attribute__((format(printf, 2, 3)))
insertLogEntry( const char * formatString, ... ) -> void;
}
...
LogController lc;
lc.insertLogEntry( "Some data %'d", int_value ); // warning in .cu file
// in .cpp file OK
我觉得这是一个nvcc
问题,避免警告的唯一方法是 移动 一行foo.insertLogEntry()
一个.cpp
文件。
即使它位于.cu
文件中,它也是host
而不是device
函数。知道怎么摆脱警告吗?
更新
'
根据此site和extension supported on all POSIX.1-2008-conforming systems。 问题是cudafe
是否必须支持这一点,即使是底层编译器也是如此gcc 4.9.3
?
更新
talonmies 建议使用--dryrun
,这会导致警告:
cudafe --allow_managed --m64 --gnu_version=40903 --c++11 -tused --no_remove_unneeded_entities --debug_mode --gen_c_file_name "/tmp/tmpxft_000026f9_00000000-4_CudaDevice.cudafe1.c" --stub_file_name "/tmp/tmpxft_000026f9_00000000-4_CudaDevice.cudafe1.stub.c" --gen_device_file_name "/tmp/tmpxft_000026f9_00000000-4_CudaDevice.cudafe1.gpu" --nv_arch "compute_30" --gen_module_id_file --module_id_file_name "/tmp/tmpxft_000026f9_00000000-3_CudaDevice.module_id" --include_file_name "tmpxft_000026f9_00000000-2_CudaDevice.fatbin.c" "/tmp/tmpxft_000026f9_00000000-7_CudaDevice.cpp1.ii"
我必须承认,我不知道接下来我能做什么......
更新:
OS: SLES 11 SP3
NSight 7.5
gcc 4.9.3 with -Wall -Werror -Wextra
更新
使用const char *
格式字符串不是一个选项,因为我想保持编译器执行格式检查。
答案 0 :(得分:1)
来自NVIDIA的Mark证实了这个错误,它将在CUDA 8中修复。
目前我将日志消息解压缩到.cpp文件中,以避免每次编译项目时出现警告。
答案 1 :(得分:0)
知道如何摆脱警告吗?
试试这个:
initState