2017-04-19 4 views
0
name: my-lib 
apps: 
    library-sample: 
    command: library_sample $SNAP/arg_file.json 

parts: 
    library: 
    source: https://github.com/the/sample.git 
    plugin: cmake 
    install: | 
     cp -r samples/library_sample $SNAPCRAFT_PART_INSTALL/ 
     cp -r ../src/samples/src/arg_file.json $SNAPCRAFT_PART_INSTALL/ 
     cp --parents modules/dep_lib1/libdep_lib1.so $SNAPCRAFT_PART_INSTALL/ 
     cp --parents modules/dep_lib2/libdep_lib2.so $SNAPCRAFT_PART_INSTALL/ 

このスナップを作成すると、my-lib.library_sampleを実行できます。サンプルは、相対パスを使用して、依存ライブラリをロードしようとしたときしかし、それはフォルダは、私が期待するように見えるインストール私の道./modules/dep_lib1/libdep_lib1.soスナップパッケージ内の相対パスを解決するにはどうすればよいですか?

を使用して失敗します。

parts/library/install/ 
|-- arg_file.json 
|-- library-sample 
|-- include 
| |-- ... 
|-- lib 
| |-- ... 
|-- modules 
    |-- dep_lib1 
    | |-- libdep_lib1.so 
    |-- dep_lib2 
     |-- libdep_lib2.so 

あなたはlibrary-sample:ためcommand:を見れば、 arg_file.jsonを正しくロードするためには、相対パスの先頭に$SNAPという接頭語を付ける必要があることがわかります。しかし、引数ファイル内の依存関係ライブラリには相対パスが指定されており、接頭辞を付けることはできません。

スナップパッケージ内の相対パスを解決するにはどうすればよいですか?

+0

私はそこに何か問題があるのを見ていません - 相対パスはうまくいくはずです。ライブラリはどのくらい正確にロードされていますか?どのようなエラーが発生していますか? – Kyle

+0

'dlopen(" ./ modules/dep_lib1/libdep_lib1.so "、RTLD_LAZY);' – Zak

+0

'dlopen'の相対パスは現在の作業ディレクトリに対して相対パスであり、バイナリを呼び出す場所ではありません。 – Kyle

答えて

0

dlopenの相対パスは、それを呼び出すバイナリの場所ではなく、現在の作業ディレクトリからの相対パスです。それを考慮してください。

関連する問題