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 온보드 프로그램에서 사용하기 위해 첫 번째 올바른 형식을 두 번째 올바른 형식으로 자동 변환하는 방법을 아는 사람이 있습니까?

답변1

친구의 올바른 기본 아이디어의 도움으로 필터에 대한 해결책을 찾을 수 있었습니다.

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

이것은 먼저 sed 블록이 고유하게 시작되도록 하고, 첫 번째는 tr개행을 제거하고, 두 번째는 tr블록이 별도의 줄에서 시작하도록 만들고, 이 sort명령은 원하는 순서를 생성하고, 마지막 tr명령은 모든 개행을 복원합니다.

sed명령은 최대 세 가지 수준의 정렬을 처리해야 하므로 약간 복잡합니다.

관련 정보