共享库怎么可能定义一个函数,但不能链接到它?



这怎么可能:

>nm --defined-only foobar.so | grep foobar
000000000003c7c0 t foobar
>gcc foobar.c foobar.so
foobar.c:(.text+0x19): undefined reference to `foobar'
collect2: ld returned 1 exit status

您无法链接到"foobar",因为foobar.so在"text"区域中将"foobar"定义为本地符号,并且仅导出全局符号

nm输出的第2列给出了符号类型。小写表示局部,大写表示全局。仅导出全局符号。参见man nm(1)

除了@Tibrogargan的优秀答案外,您可以尝试使用readelf实用程序检查绑定,它更清楚地使用全局符号和本地符号-它实际上会打印global或local

> readelf --symbols foobar.so

相关内容

最新更新