問題タブ [libgphoto2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-kernel - Linux カーネル 2.6.21.3 に対して実行されている gphoto2 での PTP エラー
gphoto または Linux カーネルの第一人者がぶらぶらしていることを期待して、私はここでこの質問をしています。Linux libgphoto2 ライブラリのカスタム フロント エンドを構築しようとしています。今のところ、gphoto2 を使用してライブラリを呼び出しています。テスト マシンとして Etch (Debian 4.0) VM イメージでこれを実行しています。ソースを gphoto-suite svn リポジトリ トランクからプルし、問題なくビルドしました。スイートの libgphoto2 と gphoto2 の部分をビルドしただけです。必要なのはそれだけだからです。カメラ (Canon EOS Rebel XTi) に接続しようとすると、PTP エラーが発生し、「I/O ライブラリでエラーが発生しました ('Unspecified Error')」というメッセージが表示されます。libgphoto2 に関連して似ていると思われるバグへの言及が、いくつかの異なるカーネルを持ついくつかの Linux ディストリビューションに散在しているのを見つけました。最新のものは 2.6.28 にあるようで、gphoto-suite チームによってカーネルのバグであると明確に宣言されています。参考文献こことここ
このライブラリは、Ubunut の Hardy Heron で以前にこのカメラで動作するようになったので、過去に動作していたことを知っています。私のターゲット プラットフォームは 2.6.21 カーネルを実行するシングル ボード コンピューターであるため、Etch VM のカーネルを 2.6.21.3 に更新しましたが、同じエラーが発生しました。
私の質問は、これが本当に USB ドライバーのカーネル バグであり、しばらくの間ぶらぶらしていて、カーネル 2.6.28.4 以降で対処されているのか、それとも実際に gphoto2 のバージョンの問題なのかを知っている人はいますか? ? 組み込み設計を新しいカーネルに簡単にアップグレードできないので、gphoto のバグであることを願っています。それまでの間、古いバージョンの gphoto をビルドしてみます。
java - JNA コールバック関数の va_list 引数の処理
ネイティブ ライブラリから受け取った va_list 引数を Java で処理するにはどうすればよいですか?
コールバック関数によるロギングを容易にする C ライブラリを使用しています。ライブラリはlibgoto2で、JNA ラッパーlibgphoto2-javaを使用してその機能にアクセスしています。ロギングの実行方法の例については、この C ファイルerrordumper
のメソッドを参照してください。
ライブラリのgp_log_add_func
. 唯一の問題は、コールバック関数の署名va_list
に処理方法がわからない引数が含まれていることです。
前に示したC の例のようva_list args
に、は に直接渡されvfprintf
ます。vfprintf
マニュアルを読むと、 va_start
「マクロで初期化された」ある種の反復可能なデータ構造でありva_arg
、クリーンアップを使用して反復した後にva_end
必要であることが明らかになります。しかし、JVM がクラッシュしないようにするために私が見つけた唯一の方法はargs
、型のパラメーターをcom.sun.jna.Pointer
or のString[]
方Object[]
が適しているものにすることです。
この va_list からデータを取得するにはどうすればよいですか?
注意: gp_log_add_funcにアクセスするために、いくつかの Java コードを追加しました。
org.gphoto2.jna.GPhoto2Nativeへの追加:
org.gphoto2.jna.LogFunc を作成しました:
org.gphoto2.jna.LogFuncの実装と使用法:
xcode - install_name_tool を無視してフレームワークを非公開にする
GPhoto2 Frameworkを使用して簡単なアプリケーションを作成しましたが、フレームワークが最初にコンパイルされた場所にある限り、これは機能します。ただし、これをアプリバンドル内に移動したいので、個別にインストールする必要はありません。そのため、このメインの実行可能ファイルに対して相対的に機能させる必要があります。
残念ながら、フレームワークは Xcode プロジェクトではありません。スクリプトを使用してビルドするため、インストール ディレクトリのビルド設定を単純に変更することはできません。これは、回答を探しているときによく見られる解決策です。Xcode と Mac のプログラミングにまったく慣れていないため、フレームワークを Xcode プロジェクトに変換する方法を知ることもできません。
私が遭遇した他のアドバイスは、install_name_tool を使用してライブラリ ID と依存関係を更新し、絶対パスを「@executable_path/../Frameworks/GPhoto2.framework」の形式のものに置き換えることでした。フレームワークは単一のバイナリではなく、多数の .dylib および .so ライブラリが含まれていますが、これらすべての更新は半分しか成功していません。
ビルド時にフレームワークをアプリ バンドルにコピーするように Xcode を設定しました。次に、最初にコンパイルされた場所からフレームワークを削除すると、アプリケーションの読み込みに失敗し、OS X によって生成されたレポートで、予想どおり、libgphoto2 ライブラリが見つからないことが示されます。
次に install_name_tool を使用して、アプリ バンドル内のすべてのフレームワーク ライブラリとアプリ バイナリ自体の参照を更新すると、アプリケーションは読み込まれますが、接続されているカメラが見つかりません。otool を使用すると、すべての参照が正しく変更されていることを確認できます。
しかし、フレームワークのコピーを元の場所に置き換えると、そのフレームワークが相対位置または絶対位置のどちらを使用しているかに関係なく、接続されたカメラを認識して再び適切に機能します。明らかに、ロードしているにもかかわらず、まだこの場所を見ています。フレームワークから元の場所にある個々のライブラリ ファイルを順番に削除して、問題がこれらの依存関係の結果であるかどうかを確認することさえ試みましたが、どれが欠けていてもアプリは機能しません。
ちなみに、フレームワークの更新版を使ってアプリをビルドすると、「@executable_path/../Frameworks/GPhoto2.framework/prefix/lib/libgphoto2.2.dylib」というライブラリが見つからないと言って失敗します。
何か間違ったことをしているのですか、ステップが抜けているのでしょうか、それとも、Xcode の外部で作成されたフレームワークに対して実行しようとしていることは不可能ですか?
python - libgphoto2.dylib を Python にロードする際の問題
gphoto を正しくインストールして、カメラのすべての機能を使用できますが、何らかの理由で
エラーをスローします。
macports を使用して libgphoto2 をインストールしましたが、前述のように gphoto は正常に動作します。
したがって、gphoto2 では libgphoto2 を使用できるのに ctypes では使用できない理由がわかりません。助言がありますか?私はこれに非常に慣れていないので、おそらく本当に基本的で愚かな間違いです。
python - Python PyGObject pixbuf メモリ リーク
gphoto2 から JPEG を取得し、データから Gio ストリームを作成してから、ストリームから Pixbuf を作成しています。
これを行う関数は、 を使用して Gtk アイドル イベントに関連付けられGLib.idle_add(...)
ます。動作しますが、メモリ リークが発生します。プロセスのメモリ使用量は継続的に上昇します。pixbufを構成する行をコメントアウトしても漏れますが、ストリームを構成する行をコメントアウトしても漏れないので、ストリームそのものが漏れているようです。pixbuf の作成後に追加stream.close()
しても役に立ちません。
ここでメモリを解放する正しい方法は何ですか?
java - jar からクラスをインスタンス化しようとすると、java.lang.NoClassDefFoundError が発生する
このエラーについてはかなり多くのことがわかりましたが、どういうわけか提案された解決策のどれも問題を解決しませんでした.
Eclipse の Ubuntu で libgphoto2 に JNA バインディングを使用しようとしています (Eclipse での Java の使用経験は中程度で、Ubuntu ではまったく経験がありません)。私が使用したい問題のバインディングはここにあります: http://angryelectron.com/projects/libgphoto2-jna/
そのページに記載されている手順に従い、上記のエラーで失敗した簡単なテスト クライアントを作成しました。そのため、GPhoto2 オブジェクトをインスタンス化することだけを試みたが、それでもエラーが発生するまで、テスト クライアントを縮小しました。テスト クライアントは次のようになります。
私が得るエラーはかなり多くのスペースを占めます:
libgphoto2 自体がインストールされ、コマンド ラインから実行されます。開発ヘッダーもあり、Python から GPhoto2 関数を呼び出すことができるため、問題はそこにありません。
しかし、Eclipse で .class ファイルを見ると、定義がありませんでした。したがって、特に ant で全体をビルドするときにエラーが発生したため、それが問題である可能性があると考えました (.jar は正常にエクスポートされましたが、エラーはドキュメントの生成のみに関係しているとわかりました)。そこで、ソースを Eclipse にロードし、自分で .jar をビルドしました。このとき、Eclipse はビルド中に警告があったと述べましたが (エラーはありませんでした)、実際の警告は表示されませんでした。誰かがビルドログがどこに行ったのか教えてくれたら、それはすでに何かを助けるかもしれません. 私は成功せずにどこでもそれを検索しました.Eclipseで「詳細」をクリックすると、警告が何であったかではなく、どこで発生したかがわかります。
とはいえ、警告は必ずしも壊滅的なものではないため、結果の Jar を上記のクライアントにインポートしました。.class ファイルを確認したところ、今回はすべてのコードが含まれていました。しかし、それでもまったく同じエラーのリストが表示されます (はい、古いライブラリがクラスパスから削除され、新しいライブラリが追加されたことを確認しました。念のため、このプロセスを数回繰り返しました)。
私は jar を作成した経験がないので、別のプログラムから呼び出すことができるかどうか、または同様のエラーが発生するかどうかを確認するために、小さな helloworld jar を作成しました。問題なく動作しました。さまざまなオプションでエクスポートして、問題を意図的に再現しようとしましたが、それでも機能しました。実験中に機能した設定で実際に必要なライブラリを再エクスポートしようとしましたが、それでも実行されませんでした。私は今ではかなり立ち往生しています。問題の解決に役立つヒントをいただければ幸いです。