2

gnatmakeを使用してサードパーティライブラリを既存のアプリケーションにコンパイルしようとしています。次のエラーが発生します。

gnatmake: "dds.adb" not found
gnatmake: "dds-domainparticipant.adb" not found
gnatmake: "dds-domainparticipantfactory.adb" not found
gnatmake: "dds-publisher.adb" not found
gnatmake: "dds-topic.adb" not found
gnatmake: "dds-publisher_impl.adb" not found
gnatmake: "dds-datawriter_impl.adb" not found
gnatmake: "dds-domainparticipant_impl.adb" not found
gnatmake: "dds-readcondition_impl.adb" not found
gnatmake: "dds-datareader_impl.adb" not found
gnatmake: "dds-subscriber.adb" not found
gnatmake: "dds-condition.adb" not found
gnatmake: "dds-datareader.adb" not found
gnatmake: "dds-statuscondition.adb" not found

これらをadpを構築するgnatmakeに追加しました。-Iにはすべての仕様(.adsファイル)が含まれ、libnddsadadにはすべてのoファイルが含まれています。

       -I/lib/ndds.4.5d/include/ndds/dds_ada \
       -I/lib/ndds.4.5d/include/ndds/dds_ada/support     \
       -I/lib/ndds.4.5d/include/ndds/dds_ada/support/low-level \

       /lib/Linux/ndds.4.5d/lib/GNATgcc/static/debug/libnddsadad.a \

なぜ実際のボディファイルが必要なのですか?スペック+.aファイルで十分ではないでしょうか?どうすればこれを回避できますか?

4

3 に答える 3

6

スペックとアーカイブライブラリだけでは不十分です。.aliファイルの場所を指定する必要があります。また、-Iの代わりに-aIフラグと-aLフラグを使用してみてください。

于 2011-05-03T20:42:55.317 に答える
3

以下を指定する必要があります。

-largs switches:リンカースイッチ。ここswitchesで、はの有効なスイッチであるスイッチのリストですgnatlink

-Ldirdirリンカがライブラリを検索するディレクトリのリストにディレクトリを追加します。

例えば、

-largs -L/lib/Linux/ndds.4.5d/lib/GNATgcc/static/debug -lnddsadad

補遺:あなたも見るかもしれません

-Adir:と同等-aLdir -aIdirです。

于 2011-05-03T20:41:01.810 に答える
2

ライブラリのgnatプロジェクトファイルを次のように作成できます。

project DDS_Lib is
   for Source_Dirs use ("/usr/include/dds_path");
   for Library_Name use "nddsadad";
   for Library_Dir use "/usr/lib/dds_path";
   for Library_ALI_Dir use "/usr/lib/dds_ali_path";
   for Externally_Built use "true";
end DDS_Lib;

次に、プロジェクトファイルで、最初に追加しますwith "dds_lib.gpr";。このライブラリとリンクするためにリンカーフラグに何も追加する必要はありません。これは自動的に行われるためです。

優れたAdaライブラリはすでにそのようなgprファイルを提供しており、標準の検索パス(たとえば、/ usr / lib / gnat /)にインストールする必要があります。非標準パスにインストールされている場合は、ADA_PROJECT_PATH環境変数にパスを追加できます。

于 2011-05-05T06:28:12.127 に答える