2016-01-19 14 views
6

私はdlopenで任意の共有オブジェクトファイルを読み込むべきC++コードを持っています。残念ながら、いくつかのシステム(例えば、私のarchlinuxは、ubuntuとgentoo上のいくつかの.soにも当てはまります)では、これらのso-fileは実際のバイナリの代わりに "GNU ld scripts"になることがあります。参考のためdlopenを使ってGNU ldスクリプトを読み込み

は、ここに私の/usr/lib/libm.soの内容は次のとおりです。

/* GNU ld script 
*/ 
OUTPUT_FORMAT(elf64-x86-64) 
GROUP (/usr/lib/libm.so.6 AS_NEEDED (/usr/lib/libmvec.so.1)) 

私はghcまたはrubyでこの問題に対処するコードピースのカップルを発見しました。私は、テキストとファイルをdlerrorの解析に基づいてテキストファイルを手作業で解析することを避けたいと思います。私はそれがひどく悪いと感じ、このフォーマットのコーナーケースを実装し維持することはできません。

このケースを処理するための明確な方法はありますか?率直に言って、私はなぜdlopenが実際にこれらのトランパラファレントに対応していないのかということに困惑しています。

注:上記のパッチを考慮すると、これは単に私のシステム構成/バージョンの問題ではないと思います。これがdlopen(機能が欠落しているのではなくバグ)ですぐに使用できる場合は、教えてください。

+0

最近あなたのld.soは十分ですか? – marcolz

+0

特定の言語に関連するものではなく、読み込み/リンクに関するものです。 – Olaf

+0

@Olaf私は私のC++プログラムで使用できる解決策を探しています。私は実行時にC++/Cコードを使ってライブラリをロードしているので、これは関連していると考えています。 – Zulan

答えて

4

リンカースクリプトは、実行時リンカーではなく、リンカーによって使用されることを意図しています。

コメントはお寄せください:ldの場合、ld.soの場合は表示されません。 ;-)

インスタンスを参照してください:http://www.math.utah.edu/docs/info/ld_3.html

だから私はdlopen()でこれを使用すると、手動でテキストを解析するために頼るについてのあなたの恐れを確認することになる、このためldの魔法の一部をインポート/模倣と意味するだろうと思いますひどく悪いコードを維持する。

EDIT:

https://www.sourceware.org/ml/libc-alpha/2011-07/msg00152.html

<gnu/lib-names.h>)あなたが実際に(dlopenのできる正しいファイルにあなたを指している必要がありますかを定義LIBM_SOが含まれている必要があります。しかし、あなたを助けることができる一つのことがあるようです。

これは、通常、悪意のあるコードは必要ないことを意味します。

+0

これは私が望んでいたものではありませんでしたが、編集は本当に役に立ちます。それは透過的に問題を処理せず、ソリューションを呼び出し元のコードに移しますが、それはきれいで、恐怖から私を救います。 – Zulan

関連する問題