問題タブ [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.
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はこれを確認しているようです)。
c - dlopenの問題(OSX)
メイン プログラムからエクスポートされた関数を呼び出したいdylib
内部からを動的にロードするメイン アプリケーションがあります。メインアプリケーションdylib
を取得dlopen(NULL,flag)
し、. handle
dlsym(handle, symbol)
function
dlopen
与えますが、私no error
がしようとすると、次のようになります:dlsym
function
error
シンボルはnmによって確認されて修正されてエクスポートされます
なぜそこにあるのかわからないのRTLD_NEXT
ですか? これはの結果dlopen(NULL,flag)
ですか?
どうすればこの問題を解決したり、目標を達成したりできますか?
または、メインアプリケーションを呼び出す他の方法はありますか (関数ポインターを dylib に渡すことはできません)。
前もって感謝します!
追加した:
書き出す:
nmの結果
dylib のコード:
c - dlopen()検索パス
dlopen()によって共有オブジェクトが検索されるパスをプログラムで見つける方法はありますか?dlopen()は/libと/usr / libだけを見るといつも思っていましたが、Linux Mintでは、libglib-2.0.soのようないくつかのコアコンポーネントがまったく異なるフォルダー、つまり/ rofs /lib/にあることがわかりました。 i386-gnu-linuxおよびその他。dlopen()が共有オブジェクトを検索するこれらすべてのパスを知る方法はありますか?すでに環境変数LD_LIBRARY_PATHを確認しましたが、まったく定義されていません。
ruby-on-rails - Rails を起動するために dlopen をロードする方法
ルート ディレクトリ (RVM を使用しています) から rails を実行しようとすると、次のメッセージが表示されます。
不足している依存関係をインストールする方法を知っている人はいますか? 使ってみた
しかし、それは役に立ちませんでした。
c - dlsym-オーバーライドされたシンボルを取得します
ライブラリを動的にロードするアプリケーションがあり、ライブラリを動的にロードします...
Windowsでは、ロードされたすべてのモジュールを繰り返し処理して、関心のあるシンボルを探すことができます。Unix/Linux環境でそれを行う方法がわかりません。最初の2つのシンボルを使用するdlsym(dlopen(0, flag))
かdlsym(RTLD_DEFAULT / RTLD_NEXT)
、検索するモジュールの順序を知っています。どのようにして、より深く、特定のシンボルのすべての定義を取得できますか?
c++ - dlopen でライブラリをロードしようとすると、未定義のシンボルが表示される
Linux ARM プラットフォームで dlopen を使用して提供された (クローズド ソース) 共有ライブラリ (プラグイン) をロードしようとしています。私はこの方法でロードしようとしています:
結果は、次のメッセージで失敗します。
nmでライブラリ内を調べてみましたが、libが剥ぎ取られたようで、シンボルが見つかりませんでした。readelf -s も試してみたところ、実際に次の結果が得られました。
読んでみると、 readelf -s が参照するライブラリで定義されているシンボルを含むすべてのシンボルが返されることがわかりました。
この質問への答えは私には完全に明確ではありません:これはライブラリにあるはずのシンボルであり、間違った方法でコンパイルされたために存在しないシンボルですか、それとも他の場所で見つけられるはずのシンボルですか? readelf -d の出力は、必要なすべての共有ライブラリを提供していることを示唆しているようです。このエラーは、実行可能ファイルをコンパイルする方法の間違いに関連している可能性がありますか、それともローダーとは関係ありませんか?
また、各列の意味について読みましたが、それらの値はかなり奇妙です。そのシンボルの説明をどのように解釈しますか? アドレスが0なのはなぜですか?タイプが NOTYPE である理由
c - Linux:静的にリンクされたバイナリを使用してプラグイン指向のプログラミングを作成することは可能ですか?
Linuxカーネルと静的にリンクされた単一のバイナリのみで構成される非常に小さな組み込みシステムがinitとして実行されていると仮定します。バイナリが実行時に外部プラグインを動的にロードできるようにする必要があります。
Linuxで可能ですか?Dlopenは共有ライブラリでのみ機能し、動的リンクにより静的バイナリはシンボルを外部にエクスポートしないため、他の方法はありますか?
c++ - Linux 上の共有ライブラリにまたがるシングルトンの複数のインスタンス
タイトルが述べたように、私の質問は明らかであり、シナリオを詳細に説明します。ファイル singleton.h には、次のように singleton パターンによって実装された singleton という名前のクラスがあります。
次に、次のように hello.cpp というプラグインがあります。
プラグインがシングルトンを呼び出し、シングルトンの属性 num を変更することがわかります。
最後に、次のようにシングルトンとプラグインを使用するメイン関数があります。
メイクファイルは次のとおりです。
それで、出力は何ですか?以下があると思いました。
ただし、実際の出力は次のとおりです。
シングルトン クラスのインスタンスが 2 つあることが証明されます。
なんで?
c++ - C++実行可能クラス
JavaのRunnableインターフェースに似たものを実現したいと思います。私はそのようにそれをしようとします:
アイデアは単純です。runメソッドをオーバーロードしたいのですが、start()はオーバーロードされたメソッドを起動する必要があります。しかし...それは機能しません。
PS私は、Runnableから派生したクラスのインスタンスを、dlopenを使用したダイナミックライブラリからロードします。