ユニットテストを書くために、静的ライブラリlibddrmgr.aの一部の関数をモックする必要があります。 gtest_ddrmaint_cmds.cpp
に疑似コードを実装し、gtest_ddrmaint_cmds.o
にコンパイルします。 しかし、G ++プロンプト複数の定義エラーオブジェクトファイルと静的ライブラリリンク中:オブジェクトファイルとスタティックライブラリをリンクする際に複数の定義エラーが発生する
g++ -g -o ddrmainttest main.o gtest_ddrmaint_cmds.o /walker/external/3rdparty/google/gtest.a /walker/external/3rdparty/google/gmock.a /walker/src/build/SLES/lib/libddrmgr.a -lacl -lxml2 -lpthread -ldl -luuid -lz -lresolv -lcap -lrt --coverage
/walker/src/build/SLES/lib/libddrmgr.a(ddrmgr.o): In function `DDR_Shutdown':
/walker/src/ddrmgr/ddrmgr.cpp:110: multiple definition of `DDR_Shutdown'
gtest_ddrmaint_cmds.o:/walker/src/gunittest/ddrmaint/gtest_ddrmaint_cmds.cpp:16: first defined here
/walker/src/build/SLES/lib/libddrmgr.a(ddrmgr.o): In function `DDR_Init':
/walker/src/ddrmgr/ddrmgr.cpp:38: multiple definition of `DDR_Init'
gtest_ddrmaint_cmds.o:/walker/external/3rdparty/google/gmock-1.7.0/gtest/include/gtest/internal/gtest-internal.h:443: first defined here
collect2: ld returned 1 exit status
make: *** [ddrmainttest] Error 1
を、私はまた、オブジェクトファイル内のいくつかのライブラリが所有する機能を無効にするためにOKだとそれがうまく動作するかどうかテストするためのデモプログラムを書きました。誰かがなぜ上記のエラーを引き起こすのか教えていただけますか?ありがとう!
あなたの質問は何ですか?それは問題がどこにあるかを伝えます。 '最初にここに定義されています /walker/src/build/SLES/lib/libddrmgr.a'さらに詳しいヘルプが必要な場合は、コードを投稿してください。まったく別の人が誰かにあなたに話すことができると期待していますか? – xaxxon
最も可能性の高い答えは、複写されたシンボルも定義されている同じ翻訳単位内のシンボルを参照する未解決のシンボルが存在し、その変換ユニットの包含を強制し、したがって重複するシンボル定義です。 –
個々の機能を置き換えることはできません。オブジェクト全体(オブジェクト==ライブラリのメンバー)を置き換える必要があります。 –