我正在使用 scons 实用程序来生成共享库。当我编写以下规则时:
SharedLibrary('hello', 'hello.c')
我会得到“libhello.so”文件。
有没有办法自动获取像“libhello.so.version”这样的文件?
我正在使用 scons 实用程序来生成共享库。当我编写以下规则时:
SharedLibrary('hello', 'hello.c')
我会得到“libhello.so”文件。
有没有办法自动获取像“libhello.so.version”这样的文件?
版本化的库已经很好地集成到 SCons 2.3.0 中:
version = "1.2.3"
lib = env.SharedLib(target='name', sources, SHLIBVERSION=version)
# generates in linux:
# name.so -> name.so.1
# name.so.1 -> name.so.1.2.3
# name.so.1.2.3
installed = env.InstallVersionedLib(os.path.join(INSTALPREFIX,"lib"), lib, SHLIBVERSION=version)
# generates in linux if INSTALLPREFIX = /usr/local/lib and --install_sandbox=mysandbox given:
# mysandbox/usr/local/libname.so -> name.so.1
# mysandbox/usr/local/name.so.1 -> name.so.1.2.3
# mysandbox/usr/local/name.so.1.2.3
SCons 2.3.0 仍然存在一些错误:库重建失败,因为符号链接创建依赖于 os.symlink,如果链接已经存在,则会失败。这在当前的开发版本中已经修复。您可以通过添加这些行来修补您的本地 2.3.0 版本:
try : os.remove(whatever)
except OSError : pass
每当对这些文件调用 os.symlink 时,第二个参数就是“随便”:
/usr/lib/scons/SCons/Tool/install.py
/usr/lib/scons/SCons/Tool/__init__.py
有一个关于 SCons 中缺乏 soname 支持的开放错误报告,以及Eric S. Raymond提出的补丁。
支持版本化共享库(soname)
此功能旨在为 Unix 下的共享库生成和安装提供更好的处理,包括正确设置 soname 和 rpath/loadpath。
Eric S. Raymond 大致基于 Richard Levitte 的作品,提供了他的代码(见附件),用于集成到 SCons 核心例程中。到目前为止,它已经在 Linux、*BSD 和 darwin 下进行了测试,并且进行了相当大的清理和调试。它已经用于 gpsd 项目的生产。
尽管如此,还是有一些工作要做。必须决定是否应通过正常
SharedLibrary()
调用或单独的功能(如VersionedSharedLibrary()
.