只有外部函数(或 public)才能进行合约间的外部调用。
库中的方法, 如果都是内部方法,那么库的方法会集成到你的合约中,不存在外部调用。
如果库里有公开的方法,且库作为合约部署在链上, 那么在引用库的合约里,调用库也是使用委托调用的方式(delegatecall)。
有一个library合约

interface Market {
struct Item {
address xxx;
bytes xxx;
}
struct Order {
uint256 xxx;
address xxx;
Item[] xxx;
}
}
library LIB {
function buy(Market.Order memory order, uint amount) public {
xxx
}
在library中编译好的selector是:
"buy(Market.Order,uint)":"217dbe21"
同样的buy方法如果是在contract中selecotor是:
"buy((uint256,address,(address,bytes)[]),uint256)": "51a8405c"
且只有contract编译好的json文件中有abi,期间尝试过使用contract的abi编译后替换前4位的selector,但是调用仍不成功。所以library中参数为结构体的方法应该如何编码调用data。