問題タブ [dlopen]

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.

0 投票する
0 に答える
325 参照

c++ - 共有オブジェクトのfstreamテンプレートにリンクまたはコンパイルされていないSunCC

Sun CC(主に6.2ですが、12.1でも発生するようです)に問題があり、共有オブジェクトのfstreamテンプレートにコンパイルまたはリンクできないようです。

私が作業しているレガシーシステムからこれを引き出し、この例で再現しました。

C / C ++共有オブジェクト(main.c):

そしてCメインプログラム(main2.c):

ライブラリをコンパイルする

Cメインプログラムをコンパイルします

これを実行すると、SunOS5.8で次のエラーが発生します。

これはnmによって確認されます:

私が使用しているコンパイラのバージョン:

Sun CCにfstreamをライブラリにコンパイルするように説得する必要がありますか?または、リンクできるライブラリはありますか?stlport4(http://developers.sun.com/solaris/articles/cmp_stlport_libCstd.html)を使用するように変更することはできません。これは、Sun CC 6.2(または5.3 ...バージョン番号とは何ですか?)では使用できないためです。

Linuxでコンパイルし、libstdc ++に対してリンクする場合、これは正常に機能するようです。fstreamがlibstdc++にコンパイルされていると思いますか?(nmはこれを確認しているようです)。

0 投票する
1 に答える
3373 参照

c - dlopenの問題(OSX)

メイン プログラムからエクスポートされた関数を呼び出したいdylib内部からを動的にロードするメイン アプリケーションがあります。メインアプリケーションdylibを取得dlopen(NULL,flag)し、. handledlsym(handle, symbol)function

dlopen与えますが、私no errorがしようとすると、次のようになります:dlsymfunctionerror

シンボルはnmによって確認されて修正されてエクスポートされます なぜそこにあるのかわからないのRTLD_NEXTですか? これはの結果dlopen(NULL,flag)ですか?

どうすればこの問題を解決したり、目標を達成したりできますか?

または、メインアプリケーションを呼び出す他の方法はありますか (関数ポインターを dylib に渡すことはできません)。

前もって感謝します!

追加した:

書き出す:

nmの結果

dylib のコード:

0 投票する
2 に答える
15038 参照

c - dlopen()検索パス

dlopen()によって共有オブジェクトが検索されるパスをプログラムで見つける方法はありますか?dlopen()は/libと/usr / libだけを見るといつも思っていましたが、Linux Mintでは、libglib-2.0.soのようないくつかのコアコンポーネントがまったく異なるフォルダー、つまり/ rofs /lib/にあることがわかりました。 i386-gnu-linuxおよびその他。dlopen()が共有オブジェクトを検索するこれらすべてのパスを知る方法はありますか?すでに環境変数LD_LIBRARY_PATHを確認しましたが、まったく定義されていません。

0 投票する
1 に答える
4955 参照

ruby-on-rails - Rails を起動するために dlopen をロードする方法

ルート ディレクトリ (RVM を使用しています) から rails を実行しようとすると、次のメッセージが表示されます。

不足している依存関係をインストールする方法を知っている人はいますか? 使ってみた

しかし、それは役に立ちませんでした。

0 投票する
2 に答える
2602 参照

c - dlsym-オーバーライドされたシンボルを取得します

ライブラリを動的にロードするアプリケーションがあり、ライブラリを動的にロードします...

Windowsでは、ロードされたすべてのモジュールを繰り返し処理して、関心のあるシンボルを探すことができます。Unix/Linux環境でそれを行う方法がわかりません。最初の2つのシンボルを使用するdlsym(dlopen(0, flag))dlsym(RTLD_DEFAULT / RTLD_NEXT)、検索するモジュールの順序を知っています。どのようにして、より深く、特定のシンボルのすべての定義を取得できますか?

0 投票する
2 に答える
16335 参照

c++ - dlopen でライブラリをロードしようとすると、未定義のシンボルが表示される

Linux ARM プラットフォームで dlopen を使用して提供された (クローズド ソース) 共有ライブラリ (プラグイン) をロードしようとしています。私はこの方法でロードしようとしています:

結果は、次のメッセージで失敗します。

nmでライブラリ内を調べてみましたが、libが剥ぎ取られたようで、シンボルが見つかりませんでした。readelf -s も試してみたところ、実際に次の結果が得られました。

読んでみると、 readelf -s が参照するライブラリで定義されているシンボルを含むすべてのシンボルが返されることがわかりました。

この質問への答えは私には完全に明確ではありません:これはライブラリにあるはずのシンボルであり、間違った方法でコンパイルされたために存在しないシンボルですか、それとも他の場所で見つけられるはずのシンボルですか? readelf -d の出力は、必要なすべての共有ライブラリを提供していることを示唆しているようです。このエラーは、実行可能ファイルをコンパイルする方法の間違いに関連している可能性がありますか、それともローダーとは関係ありませんか?

また、各列の意味について読みましたが、それらの値はかなり奇妙です。そのシンボルの説明をどのように解釈しますか? アドレスが0なのはなぜですか?タイプが NOTYPE である理由

0 投票する
2 に答える
240 参照

c - Linux:静的にリンクされたバイナリを使用してプラグイン指向のプログラミングを作成することは可能ですか?

Linuxカーネルと静的にリンクされた単一のバイナリのみで構成される非常に小さな組み込みシステムがinitとして実行されていると仮定します。バイナリが実行時に外部プラグインを動的にロードできるようにする必要があります。

Linuxで可能ですか?Dlopenは共有ライブラリでのみ機能し、動的リンクにより静的バイナリはシンボルを外部にエクスポートしないため、他の方法はありますか?

0 投票する
4 に答える
21539 参照

c++ - Linux 上の共有ライブラリにまたがるシングルトンの複数のインスタンス

タイトルが述べたように、私の質問は明らかであり、シナリオを詳細に説明します。ファイル singleton.h には、次のように singleton パターンによって実装された singleton という名前のクラスがあります。

次に、次のように hello.cpp というプラグインがあります。

プラグインがシングルトンを呼び出し、シングルトンの属性 num を変更することがわかります。

最後に、次のようにシングルトンとプラグインを使用するメイン関数があります。

メイクファイルは次のとおりです。

それで、出力は何ですか?以下があると思いました。

ただし、実際の出力は次のとおりです。

シングルトン クラスのインスタンスが 2 つあることが証明されます。

なんで?

0 投票する
2 に答える
12053 参照

c++ - C++実行可能クラス

JavaのRunnableインターフェースに似たものを実現したいと思います。私はそのようにそれをしようとします:

アイデアは単純です。runメソッドをオーバーロードしたいのですが、start()はオーバーロードされたメソッドを起動する必要があります。しかし...それは機能しません。

PS私は、Runnableから派生したクラスのインスタンスを、dlopenを使用したダイナミックライブラリからロードします。