waf在链接时:"未定义引用"错误

1 c++ compiler-errors waf undefined-reference

所以我在最近2个小时内一直在敲打这个编译器错误,并认为我会在这里发布代码,看看是否有人可以解释我的错误.

我已经删除了所有不相关的位以留下一个简单的最小程序(如下所示),据我所知,它应该编译并运行.如果我纪念,但我看不出什么是错误的调用testFunc in main然后一切编译并运行正常.然而,通过调用testFunc,我得到以下内容:

$ ./waf -v --run abr-tool
Waf: Entering directory `/home/conor/workspace/msc/AdaptiveIPTV/Software/conor/ns3/ns-3.15/build'
[1665/1822] cxxprogram: build/src/abr-tools/examples/abr-tool.cc.4.o -> build/src/abr-tools/ns3.15-abr-tool-debug
19:04:19 runner ['/usr/bin/g++', '-L/usr/lib', '-lboost_iostreams', '-L/usr/lib', '-lboost_iostreams', '-pthread', 'src/abr-tools/examples/abr-tool.cc.4.o', '-o', '/home/conor/workspace/msc/AdaptiveIPTV/Software/conor/ns3/ns-3.15/build/src/abr-tools/ns3.15-abr-tool-debug', '-Wl,-Bstatic', '-Wl,-Bdynamic', '-Wl,--no-as-needed', '-L.', '-L.', '-L.', '-L.', '-L.', '-L.', '-lns3.15-point-to-point-debug', '-lns3.15-internet-debug', '-lns3.15-mpi-debug', '-lns3.15-bridge-debug', '-lns3.15-network-debug', '-lns3.15-core-debug', '-lrt']
src/abr-tools/examples/abr-tool.cc.4.o: In function `main':
/home/conor/workspace/msc/AdaptiveIPTV/Software/conor/ns3/ns-3.15/build/../src/abr-tools/examples/abr-tool.cc:7: undefined reference to `testFunc()'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,下面的代码是作为一个更大的项目的一部分构建的,我知道错误可能来自该构建过程而不是我的代码的问题,但无论哪种方式我都遇到了一些问题在我对这里发生的事情的理解中.我正在学习c ++,并且说实话我觉得自己没有足够的经验甚至只是自己编译这段代码而且能够说"那应该肯定有用,但它没有",这就是为什么我像这样呈现它.

另外几点可能是相关的:

  • 我可以使用来自abr-tools.cc的abr-helper.h中定义的宏,当我将abr-tools.cc放在与abr-helper.h相同的文件夹中时,问题仍然存在,只需使用'#include'abr-helper .H"'.

  • 原始错误是一样的,但对于abr-helper.h中定义的一堆其他东西并在abr-tools.cc中使用

我要感谢大家提供的任何帮助,提前谢谢.

ABR-helper.h:

#ifndef ABR_HELPER_H
#define ABR_HELPER_H
#include <iostream>

void testFunc();

#endif /* ABR_HELPER_H */
Run Code Online (Sandbox Code Playgroud)

abr-helper.cc:

#include <iostream>
#include "abr-helper.h"

void testFunc(){
        std::cout << "this is all testFunc() does ..." << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

abr-tool.cc:

#include <iostream>
#include "ns3/abr-helper.h"

int main (int argc, char *argv[]){

    std::cout << "in main()" << std::endl;
    testFunc();
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 5

看来文件abr-helper.cc没有被编译.你可以通过添加一个来轻松测试

#error "Test"
Run Code Online (Sandbox Code Playgroud)

到该文件的行.如果构建成功,则文件未编译,您需要添加它.如何执行此操作取决于您的编译器或IDE.