交叉编译GSL为共享库时libtool提示不支持共享库问题求助
问题根因
你遇到的两项检测结果不存在本质冲突:
- 检测linker是否支持共享库是验证目标架构的链接器本身具备生成共享库的能力,该结果准确
- libtool不支持共享库是因为GSL自带的libtool版本默认没有适配
sparc-gaisler-elf交叉编译场景的共享库规则,不是工具链能力问题
解决方案
步骤1:重新生成配置脚本
进入GSL源码根目录,执行以下命令重新生成适配当前系统libtool版本的配置文件:autoreconf -fiv
步骤2:执行带明确参数的配置命令
运行以下配置命令,手动开启共享库编译,同时传入所有交叉编译工具链参数:
./configure --host=sparc-gaisler-elf \ --prefix=<你的自定义安装路径> \ --enable-shared=yes \ --enable-static=yes \ CC=sparc-gaisler-elf-gcc \ CXX=sparc-gaisler-elf-g++ \ AR=sparc-gaisler-elf-ar \ RANLIB=sparc-gaisler-elf-ranlib \ CFLAGS="-fPIC" \ CXXFLAGS="-fPIC" \ LDFLAGS="-Wl,-soname,libgsl.so"
如果你的目标架构不要求位置无关代码,可以删除上述的CFLAGS和CXXFLAGS参数。
步骤3:验证配置结果并编译
配置完成后检查输出,确认checking whether to build shared libraries结果为yes后,执行编译安装命令:make -j$(nproc) && make install
异常兼容方案
如果配置完成后libtool仍然提示不支持共享库,手动修改生成的libtool文件:
- 找到
enable_shared=no行,修改为enable_shared=yes - 找到
host_os判断段,为sparc-gaisler-elf补充共享库编译规则,指定动态库后缀为.so,匹配你所用工具链的链接参数即可
内容的提问来源于stack exchange,提问作者magnusmaehlum
相关产品推荐
相关产品推荐

