한동안(약 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 온보드 프로그램에서 사용하기 위해 첫 번째 올바른 형식을 두 번째 올바른 형식으로 자동 변환하는 방법을 아는 사람이 있습니까?
답변1
친구의 올바른 기본 아이디어의 도움으로 필터에 대한 해결책을 찾을 수 있었습니다.
| sed 's/^SCHILY/+SCHILY/' | tr '\012' '@' | tr '+' '\012' | sort -t. -n -k1 -k2 -k3 | tr '@' '\012'
이것은 먼저 sed
블록이 고유하게 시작되도록 하고, 첫 번째는 tr
개행을 제거하고, 두 번째는 tr
블록이 별도의 줄에서 시작하도록 만들고, 이 sort
명령은 원하는 순서를 생성하고, 마지막 tr
명령은 모든 개행을 복원합니다.
이 sed
명령은 최대 세 가지 수준의 정렬을 처리해야 하므로 약간 복잡합니다.