しばらく(約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つのレベルのソートを処理する必要があるため、少し複雑です。