一段时间以来(大概 12 年),GNU 链接器包含了对 Sun 在 1993 年引入的版本化共享库的链接器映射文件的支持。
不幸的是,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
命令有点复杂,因为它需要处理最多三个级别的排序。