問題タブ [shared-libraries]
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.
c++ - Windows で eclipse/gdb を使用して共有ライブラリをデバッグするには?
私の大学では現在、オープン ソース ツールを使用して Windows で VST プラグインを開発しています。
私の教授は Microsoft Visual Studio が好きで、Eclipse、GCC、Subclipse などのオープン ソース ツールにはかなり懐疑的です
。このオープン ソース ツールチェーンは、彼の MSVC 環境に対しても同様に強力です。
VST プラグインは、オーディオ処理用の共有ライブラリです。Tobybear Minihost をテスト アプリケーションとして使用していますが、問題なく動作します。ただし、デバッグすることはできません。ブレークポイントを設定できますが、ミニホストがプラグインを開いたときに Eclipse がブレークポイントを認識しません。
Windows で GDB/Eclipse を使用して共有ライブラリをデバッグする方法を知っていますか?
c - アプリケーションを実行するたびにエクスポートで LD_LIBRARY_PATH を定義する必要があるのはなぜですか?
いくつかの共有ライブラリ (gcc の c コード) を使用するコードがあります。コンパイル時には、-I と -L を使用してインクルード ディレクトリとライブラリ ディレクトリを明示的に定義する必要があります。これらは標準の場所にないためです。コードを実行しようとすると、次のエラーが発生します。
ただし、次の手順を実行すると、すべてが正常に機能します。
さて、奇妙な部分は、これが一度しか機能しないことです。sync_test を再度実行しようとすると、export コマンドを最初に実行しない限り、同じエラーが発生します。以下を .bashrc に追加しようとしましたが、違いはありませんでした。
c++ - SQLite ディスク使用量
SQLite は、小さく、高速で、柔軟であるという評判があります。C++ プロジェクトの 1 つで、単純な統計をファイルに保存するために使用しました。15 分間に 1 回、3 ~ 5 個の新しい単純なレコード (5 行の整数) がデータベースに保存されました。このような SQLite を数週間使用している間に、私はすぐに明らかに顕著なディスク使用量を観察しました。書き込まれたデータの量が非常に少なかったので、私はそれを期待していませんでした。プレーンテキストファイルに書き込めば、ディスクの反応はほとんど目立ちません。SQLite は本当に軽いデータベースなのでしょうか?それとも、私の問題は単純すぎてリレーショナル データベースを使用できないのでしょうか?
c# - Linux、Mono、共有ライブラリ、および未解決のシンボル
別の共有ライブラリ (libexif) の関数を呼び出し、Platform Invoke 呼び出し用の C# への単純なインターフェイスを提供する shim ライブラリ (共有、C++) があります。(つまり、C# プログラムは PInvoke を使用して、別の共有ライブラリを呼び出すカスタム共有ライブラリを呼び出します。)
Windows では、カスタム ライブラリがリンクするときにカスタム共有ライブラリが共有ライブラリにリンクし、C# アプリケーションが実行されると、すべてのシンボルが解決されます。
Linux で、自分の共有ライブラリをリンクしても、他の共有ライブラリはリンクされません。C++ ドライバーでは、アプリケーションのリンク時に他のライブラリを指定し、その時点ですべてのシンボルが解決されます。ただし、共有ライブラリを C# プログラム (mono を使用してコンパイル) から呼び出そうとすると、他の共有ライブラリのシンボルが解決されません。MONO_PATH 変数を使用して他のライブラリを指定しようとしましたが、違いはないようです。また、未解決の関数を DLLimport ステートメントで指定しようとしましたが、それも役に立たないようです。
mono/cli が実行時に見つけられるように、C# コードによって直接呼び出されない共有ライブラリを指定するにはどうすればよいですか?
次のコマンドを使用して、共有ライブラリを構築します。
そして、次のコマンド ラインで C# ドライバーをコンパイルします。
実行時に、共有ライブラリで使用されているシンボルが見つからないというエラーが表示されます。
(libexif-wrapper は、C# アプリケーションと libexif の間のシムとして機能する私の共有ライブラリです。)
これを解決する方法を理解できませんでした。任意の提案をいただければ幸いです。
編集:質問に答えるには:
管理されていない libexif-wrapper が LD_LIBRARY_PATH 環境変数にあることを確認できますか?
実際、そうではありません。代わりに、DLLImport のパスを直接指すように作成しました。ランタイムは、上記のエラー メッセージでそのパスを報告するので、それを見つけます。さらに、不足しているシンボルは C# プログラムによって呼び出されるのではなく、共有ライブラリ内の関数の 1 つが見つからない関数を呼び出します。(ありがとう - ハンク)
gcc - gcc を使用して共有ライブラリをリンクする
Windows ターゲットで Real View Compiler Tools (RVCT 3.2) を使用して作成された共有ライブラリ (*.so) があります。次に、Linux システムで gcc を使用して、この *.so ファイルをアプリケーションにリンクしようとします。
この共有ライブラリを私のアプリケーション Linux にリンクするための gcc オプションは何ですか?
私の質問は、次の-shared
ように使用されるオプションです
...、SO ファイルの作成または SO ファイルのリンクに使用されますか? 私はそれが次のようなものを作成すると信じています:
これで十分ですか?または、リンカーに動的ライブラリ (共有オブジェクト) であることを伝える他のスイッチはありますか?
shared-libraries - Common Lisp:共有ホスティング環境でライブラリを使用する最良の方法は何ですか?
私は先日これについて考えていて、SOコミュニティがこの主題について何を言わなければならないかを見たかったのです。
現在のところ、Common LispはWeb開発プラットフォームとして注目を集めており、それには正当な理由があります(その理由はすでに確信していると思います)。
PHPと同じように、共有環境でライブラリを使用するにはどうすればよいのでしょうか。
PythonやPHPなどのFASLファイルを解釈するためのインターパーターとしてSBCLのようなものを設定した場合、ライブラリ(たとえば、 clsqlなど)を使用するための最良の方法は何でしょうか。
ほとんどはasdfインストール可能ライブラリとして提供されますが、リクエストが行われるたびにライブラリを要求してインストールするのは、ばかげたオーバーヘッドになります。
これは共有ホスティング用であることに注意してください。するのが最善でしょうか..
1)アプリケーションで使用するライブラリのシステム全体のコピーをインストールします。スペースは削減されますが、正しいバージョンのライブラリを使用すると問題が発生する可能性があります。
2)ユーザーが(コントロールパネルを介して)ローカルコピーを自分でインストールできるようにします。より多くのスペース、バージョンの問題はありません。
3)Pythonのようにモジュールにラップしてオンデマンドでロードするように指示します(Lispでこれを実行できるかどうか/どのように実行できるかはわかりません)。ライブラリをロードして使用できるようにするのが最善のオプションですが、多くのライブラリがこのように使用されるように設計されているとは思いません。
とにかく、ご意見をお聞かせください、ありがとうございます。
xml - HP/UX で XML::LibXML::Common を使用するために libcl.2 に LD_PRELOAD を使用する必要があるのはなぜですか?
HP プラットフォームのみで LD_PRELOAD が強制され、他の UNIX フレーバー (AIX、Linux、および Solaris) では強制されません。
Perl モジュールXML::LibXML::Commonをすべての Unix フレーバーでビルドしました。特に、HP プラットフォームでのみ libcl.2 ライブラリに対して LD_PRELOAD を実行する必要がありました。他の UNIX プラットフォームでは、そのようなものは何も必要ありませんでした。
これは OS の動作によるものですか、それとも HP ローダー/コンパイラに欠けているものですか?
「XML::LibXML::SAX」の新しいオブジェクトを単純に作成する perl スクリプトを実行していました。
そしてそれは不平を言った
モジュール XML::LibXML::Common の 'site_perl/5.8.8/PA-RISC2.0-thread-multi/auto/XML/LibXML/Common/Common.sl' を読み込めません: Exec フォーマット エラー
そして、libcl.2 に対して LD_PRELOAD を実行すると、エラーはなくなり、Perl はマルチスレッド サポート用にビルドされます。
linux - 共有ライブラリからシンボルをエクスポートする方法
Windows ホストで RVDS コンパイラを使用して、オブジェクト コード ファイル (C ソース コード) を使用して共有ライブラリ ( *.so
) を作成しました。*.o
この共有オブジェクトをアプリケーション ( gcc
Linux ホスト上の ARM ターゲットに使用) にリンクし、実行時にセグメンテーション エラーを生成する実行可能ファイルを取得します。(私はそれをデバッグしなければならないことを知っています!)
共有ライブラリを作成する代わりに、同じソース ファイルを使用して静的ライブラリを作成し、アプリケーションとリンクしてアプリケーションを実行すると、期待どおりに動作します。
だから私の質問は:
アプリケーションとリンクしたときに正常に動作するように、いくつかの構成を使用してソース ファイル内のシンボル (アプリケーションにエクスポートされた関数) またはその他のシンボルを明示的にエクスポートする必要がありますか? 何が必要で、どうすればよいですか?
共有ライブラリはどのように機能しますか? つまり、関数がロードされて実行されるアドレスは、ライブラリが作成されたときにライブラリに与えられます。
main()
アプリケーション ( ) は、ライブラリ関数が実行されるアドレスをどのように解決しますか?スタティック ライブラリはどのように機能しますか。つまり、スタティック ライブラリの場合、このアドレス指定と解決はどのように行われるのでしょうか?