1

ファイルに保存されている情報に従っていくつかのオブジェクトを初期化する必要がある画像分析タスク用の小さなライブラリを作成しています。これらのファイルはライブラリに同梱されています。ただし、私のコードでは、これらの外部構成ファイルを参照する適切な方法がわかりません。明らかに、構成ファイルのフルパスを参照することはできません。ただし、相対パスもオプションではないようです。これは、このパスが共有ライブラリの場所、共有ライブラリにリンクされている実行可能ファイルの場所、または作業ディレクトリのいずれに相対的であるかがわからないためです。実行可能ファイルの起動元。現時点では、私のコードは次のようになります。

void
myImageAnalysisFunctionExportedInASharedLibrary(cv::Mat &input, cv::Mat &output) 
{

   const std::string configurationFile = "resources/analyserConfig.txt";
   Analyser a;
   a.setConfiguration(configurationFile);
   a.analyse(input, output);

}

OpenCVを使用するLinux/Windows環境でC++でコーディングしています。BoostやQtへの参照を必要としないポータブルソリューションが欲しいです。私はCMakeをプロジェクト構築環境として使用しています。

4

2 に答える 2

2

ディレクトリ パスに関しては、Windows では %APPDATA% フォルダーから構成ファイルを読み込んだり、そこに独自のサブフォルダーを作成したりすることをお勧めします。Linux の場合は、 $HOME... を使用して、そこにサブフォルダーを再度作成します。先頭にピリオドを追加して非表示にすることをお勧めします。これらはどちらもアプリケーション レベルのアクセス許可を許可しますが、アプリケーションのインストール場所への相対パスはほとんど許可されなくなりました。

于 2012-10-16T12:00:02.360 に答える
1

このリンクで説明されている CMake 構成ファイルを使用して解決策を見つけました。

テンプレート構成ファイルを作成しますconfig.hpp.in

#ifndef CONFIG_HPP
#define CONFIG_HPP

#cmakedefine CLASSIFIER_LOCATION @CLASSIFIER_LOCATION@

#endif

次に、ファイルの場所を設定し、CMakeLists.txt で configure_file を呼び出します。

set(CLASSIFIER_LOCATION \"${CMAKE_CURRENT_SOURCE_DIR}/resources/toto.txt\")
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.hpp.in ${CMAKE_CURRENT_SOURCE_DIR}/config.hpp)

これにより、リソース ファイルの場所へのフル パスが cmake によって書き出された config.hpp が作成されました。必要な場所に config.hpp を含めるだけです。例config.hppLinux

#ifndef CONFIG_HPP
#define CONFIG_HPP
#define CLASSIFIER_LOCATION "/home/vieux/workspace/IllustrationDetection/src/dll/resources/toto.txt"

#endif
于 2012-10-16T12:59:15.833 に答える