Libtool 库构建封装
libtool 封装编译器和链接器,屏蔽不同平台静态库/动态库的差异。它通常由 Autoconf/Automake 调用,也可直接使用。
libtoolize --force --copy
libtool --mode=compile gcc -c app.c
libtool --mode=link gcc -o libapp.la app.lo -rpath /usr/local/lib
libtool --mode=install install -c libapp.la /usr/local/lib
libtool --mode=execute ./app
libtool --finish /usr/local/lib
configure.ac:
LT_INIT
| 概念 | 含义 |
|---|---|
.lo |
libtool 对象文件 |
.la |
libtool 库描述文件 |
-rpath |
运行时库搜索路径 |
-version-info |
库版本号 |
--mode=execute |
带库路径运行程序 |
.la 文件不可移植;分发时通常只需要 .so/.a。-rpath 设置不当会导致运行时找不到库。-version-info current:revision:age 的语义与语义化版本不同,按 ABI 规则设置。--disable-shared/--enable-static。LT_INIT 已初始化。.la 和构建系统生成的规则。ldconfig 或设置 LD_LIBRARY_PATH(谨慎)。autoconf / automake — 构建系统gcc / clang — 编译器ldconfig — 运行时库缓存