原题如下:

小明正在开发一个用于 C 语言的构建工具。第一版他决定只支持最为常用的 gcc。
小明的构建工具支持使用 gcc 的链接器输出可执行文件。一个可执行文件打包若干事先编译的 obj 文件(.o 文件)。每个 obj 文件都提供一些常量、静态变量以及函数。同时这些函数也会使用外部实现的函数,比如 printf。这些外部实现的函数由动态链接库(.so 文件)提供。每个动态链接库也同样提供一些常量、静态变量以及函数。其中的函数也可能使用另一些动态链接库提供的常量、静态变量和函数。
gcc 的链接器有以下要求:
1. obj 文件必须出现在动态链接库之前;
2. 动态链接库必须以-l 参数链接,且-l 参数后去掉跟随去掉 lib 前缀与.so 后缀的文件名;
3. 如果一个动态链接库 liba.so 提供的某个函数使用了 libb.so 提供的常量、静态变量和函数,那么 gcc 的链接器要求-la 必须排在-lb 的前面。

另外,小明的构建工具根据 gcc 的命令行来判断需不需要重新链接可执行文件,所以在有多个文件可选的情况下,总是优先选择字典序最小的那个。
请写个程序帮助小明的构建工具产生 gcc 的链接命令。