这怎么可能:
>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