这怎么可能:
>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
答案 0 :(得分:1)
您无法链接到“foobar”,因为foobar.so将“foobar”定义为“文本”区域中的本地符号,并且仅导出全局符号
nm输出的第2列给出了符号类型。小写表示本地,大写表示全局。仅导出全局符号。见man nm(1)
答案 1 :(得分:0)
除了优秀的@Tibrogargan答案之外,您可以尝试使用readelf
实用程序检查绑定,它更清楚地表示全局vs本地符号 - 它实际上会打印GLOBAL或LOCAL
> readelf --symbols foobar.so