2017-01-30 12 views
0

リンカスクリプトまたはマップファイルを使用してシンボルの名前を変更することはできますか? 私はC++とFortranの組み合わせで書かれたコードを、複数のFortranコンパイラ(Linux上で動作するように)に適応させようとしています。これは現在、大文字と小文字を区別するためのオプションを有効にしてSolaris Studioコンパイラ用に作成されています。私はFortranシンボル名のマングリングを自動的に変更する(Makefileなどから)ようにしたいと思います。リンカスクリプトを使用してシンボルの名前を変更する

その含有するリンカースクリプトをエイリアスを作成することが可能であるように見えるん:

C_Function_ = c_function; 

ソート-の意志の仕事。残念ながら、このスクリプトを参照するために-Tオプションを追加すると、動作にいくつかの変更が加えられ、libdl.so.2/librt.so.1が見つからないためにエラーが発生します。私がインクルードする必要のあるデフォルトのリンカスクリプトがありますか?私はLinux上でbfdと金のリンカーの両方を試しました。

答えて

2

あなたは本当にシンボルの名前を変更することはできませんが、リンカスクリプトで

PROVIDE(c_function = C_function_); 
... 

のような既存のシンボルにエイリアスを定義することができます。

あなたはldから-Tオプションでこのリンカスクリプトを渡すと、それは元(デフォルト)リンカスクリプトに置き換えられます。むしろリンカスクリプトをデフォルトのに拡張したい場合は、-Tオプションなしで渡します(追加のオブジェクトファイルと同じように)。

この方法では、すべてが期待どおりに動作するはずです。

+0

「-T」を省略すると、これが解決されます。 '提供するものは何をするのですか?これは、シンボルが共有ライブラリにコンパイルされている場合には機能しません。 – okapi

+0

'PROVIDE()'は、使用されている名前がまだ存在しない場合、シンボルにエイリアスが付いていることを保証します。しかし、これがなぜ共有ライブラリを構築するのと衝突するのかはわかりません。 – mfro

関連する問題