Lesstep
GitHub Actions・Ubuntu 26.04・2026年11月4日に確認

Ubuntu 26.04 の「cannot enable executable stack as shared object requires」

ubuntu-latest は、2026年10月19日から11月19日にかけて Ubuntu 24.04 から 26.04 に移ります(ほかに変わること)。Ubuntu 26.04 の glibc は 2.43(11月4日の libc6 は 2.43-2ubuntu2.4)で、24.04 は 2.39 です。glibc 2.41 からは、共有ライブラリが実行可能なスタックを求めても dlopen はスタックを実行可能にせず、読み込みを失敗させます(glibc の NEWS・2.41 の項)。24.04 では同じライブラリが読み込めていました。

どう見えるか

ERROR: Unable to load dependent library .../lib/julia/libopenlibm.so
Message:.../lib/julia/libopenlibm.so: cannot enable executable stack as shared object requires: Invalid argument

ImportError: libtensorflow_cc.so.2: cannot enable executable stack as shared object requires: Invalid argument

MATLAB:mex:ErrInvalidMEXFile ... blosc_mex.mexa64: cannot enable executable stack as shared object requires: Invalid argument

1つ目は setup-julia が julia --version で確かめるところ、2つ目は TensorFlow を import する Python のテスト、3つ目は MATLAB の MEX ファイルです。直すのは、文に名前が出ているライブラリです。

報告のあったもの

こうしたライブラリのほとんどは、スタックの上でコードを動かしてはいません。印はたいてい、.note.GNU-stack の無いアセンブリのファイルやバイナリの入力が1つあるせいで付き、ビルドの時にリンカーが missing .note.GNU-stack section implies executable stack と警告しています。

印を見つける

readelf -lW libopenlibm.so | grep GNU_STACK
  GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RWE 0x10

RWE なら問題があり、RW なら大丈夫です。patchelf --print-execstack でも同じことが分かります。

直し方1:印の無いリリースを使う

Julia なら、matrix と [compat] のいちばん低い版を 1.10.9(または 1.11.4)に上げます。Python のパッケージは、新しい wheel では印が無いことがあります。長く効くのはこの直し方です。

直し方2:patchelf で印を消す

- run: |
    sudo apt-get update && sudo apt-get install -y patchelf
    patchelf --clear-execstack "$(dirname "$(which julia)")/../lib/julia/libopenlibm.so"

ライブラリを入れるステップのあと(この例では setup-julia のあと)に置きます。Ubuntu 26.04 の apt の patchelf は 0.18.0 で、--clear-execstack があります。ライブラリが本当にスタックの上でコードを動かしていなければ安全で、たいていはそうです。動かしている場合(たとえば GCC の入れ子の関数)は、あとでセグメンテーション違反で落ちるので、消したあとにテストを走らせます。

直し方3:自分のライブラリは印なしで作り直す

-Wl,-z,noexecstack でリンクするか、アセンブリのファイルごとに、リンカーが探しているセクションを書きます:

.section .note.GNU-stack,"",@progbits

MEX ファイルなら、blosc-matlab と同じく MEX の LDFLAGS に -Wl,-z,noexecstack を足します。作ったものは readelf -lW で確かめます。

直し方4:当面は glibc に許させる

env:
  GLIBC_TUNABLES: glibc.rtld.execstack=2

glibc のマニュアルは、この場合のために値 2 を説明しています。プロセスの開始時にスタックを実行可能にするので、あとの dlopen でこうしたライブラリを読み込めます。プロセス全体のスタックが実行可能になるので、テストのジョブのつなぎとして使います。または、GitHub が 24.04 のイメージを終えるまで、そのジョブを ubuntu-24.04 に残します。

見分け方

ほかの 26.04 の失敗

失敗したジョブを IntelliJ IDEA から見るなら

Pipeline Inbox for GitHub Actions Workflows は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。すべてのリポジトリの実行を、ジョブ・ステップと一緒に IDE のツールウィンドウに並べ、いまのブランチの実行はステータスバーに出ます。読むのは無料、失敗したジョブの再実行・キャンセル・ワークフローの実行・デプロイのレビューは Pro(月 US$1.50・30日の無料試用つき)です。

JetBrains Marketplace で入れる

GitHub と GitHub Actions は GitHub, Inc. の商標、Ubuntu は Canonical Ltd. の商標、MATLAB は The MathWorks, Inc. の商標、TensorFlow は Google LLC の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・Canonical・The MathWorks・Google・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:「The ubuntu-latest label will migrate to Ubuntu 26」 · Ubuntu 26.04 の「cannot open shared object file」 · IntelliJ IDEA で使える GitHub Actions のプラグインの比較 · English