You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WSL Ubuntu编译Ada程序时遇libgnatprj共享库错误求助

解决WSL Ubuntu下GNAT编译时的共享库栈权限错误

嘿,我之前也碰到过类似的问题,在WSL环境里用旧版本GNAT编译Ada程序时经常会踩这个共享库的坑。你遇到的libgnatprj.so.4.9无法启用可执行栈的错误,本质是旧版本的GNAT库和WSL的安全机制不兼容导致的,下面给你几个靠谱的解决办法:

1. 修复共享库的可执行栈属性

这是最直接的临时修复方案,我们可以用execstack工具去掉这个库的可执行栈要求:

  • 先装execstack(如果没装的话):
    sudo apt update && sudo apt install execstack
    
  • 找到库的具体位置:
    find /usr -name libgnatprj.so.4.9 2>/dev/null
    
  • 清除它的可执行栈标记:
    sudo execstack -c /path/to/libgnatprj.so.4.9
    
    把/path/to/换成你刚才找到的实际路径,比如一般是/usr/lib/x86_64-linux-gnu/libgnatprj.so.4.9

改完之后再跑gnatmake sieve.adb试试,大概率能解决。

2. 升级GNAT工具链

GNAT 4.9确实太老了,和WSL的兼容性很差,不如直接装个新版本:

  • 先卸载旧版本:
    sudo apt purge gnat-4.9
    sudo apt autoremove && sudo apt clean
    
  • 安装最新版GNAT:
    sudo apt install gnat
    
    或者指定具体版本(比如GNAT 12,稳定性不错):
    sudo apt install gnat-12
    

新版本的工具链不仅能解决这个栈权限问题,还能获得更好的编译性能和Ada新特性支持,一举两得。

3. 切换到WSL 2(如果还在用WSL 1)

WSL 1的兼容性远不如WSL 2,很多Linux下的底层操作都会出问题。如果你还在使用WSL 1,可以升级到WSL 2:

  • 先查看当前WSL版本:
    wsl -l -v
    
  • 如果是WSL 1,执行升级命令:
    wsl --set-version Ubuntu 2
    

升级完成后重启WSL,再编译程序,应该就能避开这类底层兼容性问题了。


内容的提问来源于stack exchange,提问作者csoutos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:43:33