1

だから、私は過去 2 時間、このコンパイラ エラーに頭を悩ませていたので、ここにコードを投稿して、誰かが私の間違いに光を当てることができるかどうかを確認しようと考えました。

無関係なビットをすべて取り除いて、最小限のプログラム (以下に示す) を残しました。これは、私が見る限り、コンパイルして実行する必要があります。私が来ても、メインのtestFuncへの呼び出しで何が間違っているのかがわからない場合、すべてがコンパイルされ、正常に実行されます。ただし、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

ご覧のとおり、以下のコードははるかに大きなプロジェクトの一部としてビルドされています。コードの問題ではなく、そのビルド プロセスからエラーが発生している可能性があることは承知していますが、いずれにせよ、何か壁にぶつかっています。ここで何が起こっているかについての私の理解では。私は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 */

abr-helper.cc:

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

void testFunc(){
        std::cout << "this is all testFunc() does ..." << std::endl;
}

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;

}
4

4 に答える 4

5

ファイルabr-helper.ccがコンパイルされていないようです。これを簡単にテストするには、

#error "Test"

そのファイルへの行。ビルドが成功した場合、ファイルはコンパイルされていないため、追加する必要があります。その方法は、コンパイラまたは IDE によって異なります。

于 2012-12-24T20:52:50.817 に答える
1

コンパイルに abr-helper.cc を含める必要があります。そうしないと、実装がリンクされません。

于 2012-12-24T20:53:18.137 に答える
1

私はwafを知らないので、解決策を与えることはできません。しかし、ここで何が起こるか:

コンパイル中、すべて正常に動作します。この問題は、リンク中に発生します (ld エラー)。

: 19:04:19 runner で始まる行には、abr-helper.o などへの参照はありません。waf 構成のどこかに abr-helper.cc を追加するのを忘れているに違いありません。

于 2012-12-24T20:55:19.550 に答える
0

他の回答に加えて(abr-tool.ccコンパイルするファイルも表示されません)、関数void testFuncを宣言する必要がありますextern

于 2012-12-24T21:31:39.920 に答える