我有两个库,lib1.so
和lib2.so
。 lib1.so
有一个函数func1
。 libs2.so
使用此函数func1
。
编译没有问题。
但是当用libs2.so
开始一个程序时,它说,func1
是一个未定义的符号。 Wenn使用ldd
工具,然后指向存在的文件。好的,我输入了命令nm -D lib1.so | grep -i 'func1'
和'nm -D lib2.so | grep -i 'func1'
。
有一个小区别:lib1.so
命令显示类似
00000000003e393c T XYZfunc1ZXYmm
libs2.so
命令显示此
U XYZfunc1ZXY
据我所知,U
的{{1}}代表lib2.so
。 1)我是对的吗?我也可以看到,在第一个输出中,最后有一个Undefined
。我想这个:只要mm
是成员func1
的一部分,就会添加到符号中。 2)这是正确的吗?如果是,为什么mm
找不到符号?
4)可能还有另一个问题:让我们假设我编译了lib2.so
,这取决于lib2.so
,就像在这个例子中一样。编译lib1.so
后,我重新编译libs2.so
,更改了一些更小的,但所有导出的符号都是相同的。可能会出现像我上面描述的问题吗?