私はdlopen()
を使用して追加のモジュールをロードするアプリケーションを持っています。アプリケーションとモジュールは、gcc 4.6を使ってUbuntu 12.04 x86_64上に構築されますが、i386 arch用に構築されています。バイナリは、まったく同じOSを持つ別のマシンにコピーされ、うまく動作します。静的TLSでもうオブジェクトを読み込めません
彼らはUbuntuの12.04のi386にコピーされている場合は、その後、いくつかの(すべてではない)モジュールは、次のメッセージを読み込みに失敗:私はこれは__thread
変数の利用によって生じていると思われるでしょう
dlopen: cannot load any more object with static TLS
。しかし、このような変数は、ロードされたモジュールでは使用されません。
誰かが追加情報を提供できますか?その理由は何ですか?
私は__thread
変数の数を減らし、(-ftls-model
などで)それらを最適化しています、私はそれがほとんど同一システム上で動作しない理由だけで好奇心が強いです。
関連:http://stackoverflow.com/questions/13650740/dlopen-cannot-load-any-more-object-with-static-tls – Wok