G ++を使用してヘッダファイルと静的ライブラリを含むプログラムをコンパイルするときに欠落している依存関係を確認するための最良の方法は何ですか?

G ++を使用してヘッダファイルと静的ライブラリを含むプログラムをコンパイルするときに欠落している依存関係を確認するための最良の方法は何ですか?

Acontis etherCATメインスタックのデモをコンパイルしようとしていますが、問題を解決するためにどのヘッダーやライブラリを含めるべきかについての手がかりを提供せずに、コンパイルしようとしたときにG ++で定義されていない多くの参照を報告します。 G ++はどの参照に対しても欠落しているヘッダーを報告しないので、未定義の参照を満たすためにどのファイルが必要であるかをどうやって知ることができますか?

重要な場合は、ソースからオブジェクトファイルを作成でき、接続中にエラーが発生します。 Acontisはmakefileを提供しません。

Linux用Acontisが提供するドキュメントは次のとおりです。 2.5.1 デモのコンパイル Linuxのコンパイル

g++を使用してヘッダーの場所を見つけました(読みやすくするためにフォーマットを簡素化し、各パラメータが1行に収まるように<Install_Location>を挿入しました)。

g++
-I <Install_Location>/Examples/EcMasterDemo/ 
-I <Install_Location>/SDK/INC/ 
-I <Install_Location>/SDK/INC/Linux 
-I <Install_Location>/Examples/Common/Linux 
-I <Install_Location>/Examples/Common/ 
-I <Install_Location>/Sources/Common 
-o test 
EcDemoApp.cpp 
<Install_Location>/Examples/Common/Linux/EcDemoMain.cpp 
<Install_Location>/Sources/Common/EcTimer.cpp 
<Install_Location>/SDK/LIB/Linux/x64/libAtemRasSrv.a 
<Install_Location>/SDK/LIB/Linux/x64/libEcMaster.a 
-pthread

以下は出力の短い部分です。 g++端末出力

私はカーネル4.14.213-rt103#1 SMP PREEMPT RTを使用してUbuntu 20.04を実行しています。 g++はバージョン9.3.0です。


-l パラメータ変更後の更新 (Steeldriver に感謝)

実行されたコマンド:

/ClassB/Examples/EcMasterDemo$ gcc                            
<Install_Dir>/ClassB/Examples/Common/Linux/EcDemoMain.cpp                         
<Install_Dir>/ClassB/Examples/EcMasterDemo/EcDemoApp.cpp                          
<Install_Dir>/ClassB/Sources/Common/EcTimer.cpp                                   
-o test                                                                                                  
-I <Install_Dir>/ClassB/Examples/EcMasterDemo                                     
-I <Install_Dir>/ClassB/SDK/INC/Linux                                             
-I <Install_Dir>/ClassB/SDK/INC                                                   
-I <Install_Dir>/ClassB/Sources/Common                                            
-I <Install_Dir>/ClassB/Examples/Common                                           
-I <Install_Dir>/ClassB/Examples/Common/Linux                                     
-L <Install_Dir>/ClassB/SDK/LIB/Linux/x64                                         
-lAtemRasSrv -lEcMaster -pthread -ldl -lrt

これは未定義のいくつかの参照を修正したようですが、まだ多くの参照があります。

g++端末出力

ベストアンサー1

プログラムのコンパイルを妨げる2つの問題があります。

まず、Steeldriverが答えたように、ライブラリパスが正しく含まれておらず、GCCでライブラリが正しく参照されていませんでした。

第二に、誤って削除されたか、最初のアーカイブから正常に抽出されなかったため、いくつかのcppソースファイルがありません。

これらの問題が修正されると、プログラムはドキュメントの前半でプログラマによって提供されたデモソースファイルのリストに基づいてGCCで正しく構築されます。

参考までに、Acontisはコンパイラの例を提供していないため、Ubuntu Linux 20.04でAcontis etherCATマスターデモを構築できるG ++パラメータは次のとおりです。

g++                            
<Install_Dir>/ClassB/Examples/Common/Linux/EcDemoMain.cpp                         
<Install_Dir>/ClassB/Examples/EcMasterDemo/EcDemoApp.cpp                          
<Install_Dir>/ClassB/Examples/Common/EcDemoParms.cpp                              
<Install_Dir>/ClassB/Examples/Common/EcSelectLinkLayer.cpp                        
<Install_Dir>/ClassB/Examples/Common/EcNotification.cpp                           
<Install_Dir>/ClassB/Examples/Common/EcSdoServices.cpp                            
<Install_Dir>/ClassB/Examples/Common/EcSlaveInfo.cpp                              
<Install_Dir>/ClassB/Examples/Common/EcLogging.cpp                                
<Install_Dir>/ClassB/Sources/Common/EcTimer.cpp                                   
-o test                                                                                                  
-I <Install_Dir>/ClassB/Examples/EcMasterDemo                                     
-I <Install_Dir>/ClassB/SDK/INC/Linux                                             
-I <Install_Dir>/ClassB/SDK/INC                                                   
-I <Install_Dir>/ClassB/Sources/Common                                            
-I <Install_Dir>/ClassB/Examples/Common                                           
-I <Install_Dir>/ClassB/Examples/Common/Linux                                     
-L <Install_Dir>/ClassB/SDK/LIB/Linux/x64                                         
-lAtemRasSrv -lEcMaster -pthread -ldl -lrt -Wall

おすすめ記事