GNUリンカエラーの解決策を見つける

GNUリンカエラーの解決策を見つける

しばらく(約12年)、GNUリンカには1993年にSunが導入したバージョン共有ライブラリのリンカマップファイルのサポートが含まれていました。

残念ながら、GNUリンカは正しいリンカマップファイルを拒否しますが、同様のマップファイルを逆順で表示することを好みます。

正しいリンカーマップファイルは次のとおりです。

SCHILY_3 {
global:
    function5;
    function6;
local:
     *;
} SCHILY_2;

SCHILY_2 {
global:
    function3;
    function4;
local:
     *;
} SCHILY_1;

SCHILY_1 {
global:
    function1;
    function2;
local:
     *;
};

しかし、GNUリンカーは次のようなものです:

SCHILY_1 {
global:
    function1;
    function2;
local:
     *;
};

SCHILY_2 {
global:
    function3;
    function4;
local:
     *;
} SCHILY_1;

SCHILY_3 {
global:
    function5;
    function6;
local:
     *;
} SCHILY_2;

UNIX / LINUXオンボードプログラムで使用するために最初の正しい形式を2番目の正しい形式に自動的に変換する方法を知っている人はいますか?

ベストアンサー1

友達の正しい基本的なアイデアの助けを借りて、フィルタの解決策を見つけることができました。

| sed 's/^SCHILY/+SCHILY/' | tr '\012' '@' | tr '+' '\012' | sort -t. -n -k1 -k2 -k3 |  tr '@' '\012'

これは最初にsed ブロックを一意に開始し、最初はtr改行を削除し、2番目はブロックをtr別々の行で開始し、このsortコマンドは目的の順序を生成し、最後のtrコマンドはすべての改行を復元します。

このsedコマンドは最大3つのレベルのソートを処理する必要があるため、少し複雑です。

おすすめ記事