1

私は C++ でクロスプラットフォーム ライブラリに取り組んでいます。Windows (MinGW/msys) と Ubuntu (g++) の両方でコンパイルしましたが、エラーなしでコンパイルされます。

Kubuntuを搭載したコンピューターを手に入れました。そこでコンパイルしようとすると、いくつかの変数に複数の定義があるというエラーが表示されます。これらの変数はexternヘッダー ファイルで定義され、1 つの cpp で 1 行で定義されます。

./libAoTK.a(aotk_unix.o):/home/rickard/c++/AoTK/src/aotk_unix.cpp:16: multiple definition of `AoTK::disp'
./libAoTK.a(aotk_unix.o):/home/rickard/c++/AoTK/src/aotk_unix.cpp:12: first defined here

aotk_unix.cppのコードには の定義が 1 つだけありdisp、12 行目と 16 行目では への参照がありませんdisp

別の *nix マシンではまったく同じコードが正常にコンパイルされるのに、リンクに失敗する理由がわかりません。

4

1 に答える 1

1

bdonlans コメントの助けを借りてそれを理解しました。問題は、lib-archive を作成するときのメイクファイルにありました。コマンドを使用しました

ar -cvq 

に変更するときに、アーカイブ内の既存のファイルを上書きしませんでした

ar -cr

エラーなしでリンクします

于 2011-08-28T16:00:23.963 に答える