libxxx.so.N背后的数字代表什么?

时间:2012-09-27 16:37:36

标签: gcc linker shared-libraries

我尝试链接swiftkey库并出现此错误:

g++ test.cpp -I include/swiftkeysdk/ -L lib/x86/ -lswiftkeysdk-cpp

/usr/bin/ld: warning: libm.so.2, needed by lib/x86//libswiftkeysdk-cpp.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libcpp.so.4, needed by lib/x86//libswiftkeysdk-cpp.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libc.so.3, needed by lib/x86//libswiftkeysdk-cpp.so, not found (try using -rpath or -rpath-link)

$ ldconfig -p | grep "libm.so"
libm.so.6 (libc6, OS ABI: Linux 2.6.15) => /lib/i386-linux-gnu/libm.so.6
libm.so (libc6, OS ABI: Linux 2.6.15) => /usr/lib/i386-linux-gnu/libm.so
$ ldconfig -p | grep "libc.so"
libc.so.6 (libc6, OS ABI: Linux 2.6.15) => /lib/i386-linux-gnu/libc.so.6

但我的g ++与其他项目一起工作正常。任何人都知道背后的数字是什么。所代表的?以及如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

.so后面的数字是库的版本号。版本号定义库的ABI。也就是说,不同版本的源代码可以使用相同的数字,只要它们的二进制接口是可互换的。

有关详细信息,请参阅https://unix.stackexchange.com/questions/475/how-do-so-shared-object-numbers-work

libc.so.3在Linux上无法使用。你从哪里得到libswiftkeysdk-cpp.so?