Acontis etherCATメインスタックのデモをコンパイルしようとしていますが、問題を解決するためにどのヘッダーやライブラリを含めるべきかについての手がかりを提供せずに、コンパイルしようとしたときにG ++で定義されていない多くの参照を報告します。 G ++はどの参照に対しても欠落しているヘッダーを報告しないので、未定義の参照を満たすためにどのファイルが必要であるかをどうやって知ることができますか?
重要な場合は、ソースからオブジェクトファイルを作成でき、接続中にエラーが発生します。 Acontisはmakefileを提供しません。
Linux用Acontisが提供するドキュメントは次のとおりです。
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
私はカーネル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
これは未定義のいくつかの参照を修正したようですが、まだ多くの参照があります。
答え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