我试图在ns3中使用cuda,但是当我尝试运行CXX="nvcc" ./waf configure
时,它会在屏幕上显示以下消息:
Checking for 'g++' (C++ compiler) : not found
Checking for 'clang++' (C++ compiler) : not found
Checking for 'icpc' (C++ compiler) : not found
could not configure a C++ compiler!
(complete log in /home/kelu/workspace/ns-3.24/build/config.log)
我检查了config.log,它说如下:
Checking for 'g++' (C++ compiler)
find program='nvcc' paths=['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/usr/local/cuda/bin'] var='CXX' -> ['nvcc']
from /home/kelu/workspace/ns-3.24: Could not determine the compiler type
not found
----------------------------------------
Checking for 'clang++' (C++ compiler)
find program='nvcc' paths=['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/usr/local/cuda/bin'] var='CXX' -> ['nvcc']
from /home/kelu/workspace/ns-3.24: Not clang/clang++
not found
----------------------------------------
Checking for 'icpc' (C++ compiler)
find program='nvcc' paths=['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/usr/local/cuda/bin'] var='CXX' -> ['nvcc']
from /home/kelu/workspace/ns-3.24: Not icc/icpc
not found
from /home/kelu/workspace/ns-3.24: could not configure a C++ compiler!
nvcc位于/ usr / local / cuda / bin中,位于路径中。但在我看来,ns3的构建脚本并没有将nvcc解析为编译器。
有人可以告诉我在ns3中使用nvcc CXX编译器的正确方法吗?
感谢。
答案 0 :(得分:1)
您的问题可能是Waf实际检查编译器的内置#defines以检查编译器是否被调用为" gcc"实际上是gcc与否。作为一个具体的例子,如果它检测到编译器是Intel的icc(因为它是#defined __INTEL_COMPILER),但是使用" gcc"来调用它将会出错。命令行!
进行身份识别的代码位于https://waf.io/apidocs/_modules/waflib/Tools/c_config.html#get_cc_version。
所以,如果你没有让硬看起来像支持的编译器的编译器,看起来你应该编写自己的Waf工具。
但是,你可以尝试破解你的方式。例如,让我们说你的编译器与gcc足够兼容,但它仍然没有超过Waf的荒谬严格的测试。修复是运行" waf configure"使用真正的gcc,然后编辑Waf存储检测结果的文件,因此在构建步骤中,Waf实际上将运行编译器而不是gcc。您可以通过编辑build / c4che / _cache.py来完成此操作:将CC定义更改为编译器的完整路径。
答案 1 :(得分:0)
我还没有找到在ns-3中使用nvcc的方法,但我确实找到了解决这个问题的方法。我很高兴在这里分享我的解决方案以帮助他人:
ar rcs libcudacode.a a.o b.o c.o
(您需要先使用g ++,nvcc或其他任何你想要的* .o文件)/your/lib/folder/
并将您的cuda代码放入/your/src/folder
CXXFLAGS_EXTRA="-I/your/src/folder -I/your/cuda/dir/include" LINKFLAGS_EXTRA="-L/your/lib/folder -L/your/cuda/dir/lib64 -lcudacode -lcudart" ./waf configure
。./waf
您的代码应该立即编译。您可以通过#including "corresponding_header.h"
一点解释:
CXXFLAGS_EXTRA
和LINKFLAGS_EXTRA
在ns-3的编译系统中添加编译标志。您需要添加cuda代码和NVidia的cuda库才能使用这些功能。CXXFLAGS_EXTRA
和LINKFLAGS_EXTRA