如何在ns3中使用nvcc作为编译器

时间:2016-03-05 01:18:51

标签: c++ compilation nvcc ns-3

我试图在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编译器的正确方法吗?

感谢。

2 个答案:

答案 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的方法,但我确实找到了解决这个问题的方法。我很高兴在这里分享我的解决方案以帮助他人:

  1. 使您的cuda代码成为静态库: ar rcs libcudacode.a a.o b.o c.o(您需要先使用g ++,nvcc或其他任何你想要的* .o文件)
  2. 将libcudacode.a放入/your/lib/folder/并将您的cuda代码放入/your/src/folder
  3. 将lib文件夹和src文件夹添加到waf中: 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
  4. ./waf
  5. 您的代码应该立即编译。您可以通过#including "corresponding_header.h"

    访问cuda代码中的所有公共函数

    一点解释:

    1. CXXFLAGS_EXTRALINKFLAGS_EXTRA在ns-3的编译系统中添加编译标志。您需要添加cuda代码和NVidia的cuda库才能使用这些功能。
    2. 如果您使用了其他任何库,请将它们放在CXXFLAGS_EXTRALINKFLAGS_EXTRA
    3. 检查系统中的cuda目录名称。你的机器可能不是lib64。