在我从源代码构建的项目(Nix 2.3 FWIW)中,一个共享库(libnixstore.so)与另一个共享库(libnixutil.so)链接。命令行是:
// Define the main line function
const valueline = d3.line<any>()
.x( (d) => {
return vm.chartProps.x(d.x);
})
.y( (d) => {
return vm.chartProps.y(d.y);
});
// Define the area for the confidence intervals function
const confidenceArea = d3.area<any>()
.x( (d) => {
return vm.chartProps.x(d.x);
})
.y0( (d) => {
return vm.chartProps.y(d.yt);
})
.y1( (d) => {
return vm.chartProps.y(d.yb);
});
此命令行是“配置”脚本生成的。但是,这失败了,提示无法从“ libnixutil.so”中找到许多符号。 未解析的符号实际上已经存在,并且进行了正确的处理(我检查了'nm'和'readelf')。 现在,如果我只是将'-lnixutil'替换为'src / libutil / libnixutil.so',链接就可以了。 有什么区别,是否已记录在案?我认为“ man ld”中没有合适的东西,(似乎)没有任何与网络搜索直接相关的东西。
答案 0 :(得分:1)
现在,如果我只是将'-lnixutil'替换为'src / libutil / libnixutil.so',链接就可以了。有什么区别
区别在于-lnuxutil
会搜索各种目录中的库,而src/libutil/libnixutil.so
不会。
由于使用-lnuxutil
时找不到库却无法链接,因此可以安全地假定它在src/libutil
之外的其他地方找到了该库的版本,并且找到的版本可能是错误(例如,旧版本)。
要查看链接器在哪里找到libnixutil
的 ,请使用-Wl,-t
标志(它将显示所有正在由链接器打开的输入文件)。