アプリケーションが起動できないとき
·
amgsk
たまにバージョンの差異が原因でアプリケーションが起動できないときがある。 そんなときの対処としては以下になる。
- シンボリックリンクで最新バージョンを過去バージョンで偽装する
- 共有ライブラリのバージョンを落とす
- アプリケーションバージョンを落とす
今回はfreecadで起動できない問題に遭遇したので対処例として書いておく。
rofiでfreecadを起動しようとしたところ、無反応だったのでターミナルから起動すると以下エラーログが出力されていた。
freecad: error while loading shared libraries: libxerces-c-3.2.so: cannot open shared object file: No such file or directory
バージョンは異なるものの、xerces-c
はインストールはされている。指定バージョン(今回のケースだと3.2系)に依存している模様。
> yay -Qi xerces-c
Name : xerces-c
Version : 3.3.0-1
Description : A validating XML parser written in a portable subset of C++
Architecture : x86_64
URL : https://xerces.apache.org/xerces-c/
Licenses : APACHE
Groups : None
Provides : None
Depends On : gcc-libs curl libnsl icu
Optional Deps : None
Required By : freecad libkolabxml
Optional For : None
Conflicts With : None
Replaces : None
Installed Size : 8.11 MiB
Packager : Lukas Fleischer <lfleischer@archlinux.org>
Build Date : Sun 02 Feb 2025 11:29:45 PM JST
Install Date : Mon 03 Feb 2025 08:03:29 AM JST
Install Reason : Installed as a dependency for another package
Install Script : No
Validated By : Signature
ライブラリをlibxerces-c-3.2.soに偽装して試してみる。
既存のlibxerces-c-3.3.so
を3.2としてシンボリックリンクを貼る。
sudo ln -s /usr/lib/libxerces-c-3.3.so /usr/lib/libxerces-c-3.2.so
どうやら3.2にどっぷり依存しているようでシンボルの参照エラーが起きていた。
freecad: symbol lookup error: /usr/lib/freecad/lib/libFreeCADBase.so: undefined symbol: _ZTIN11xercesc_3_214BinInputStreamE
アプリケーションのバージョンは落としたくないので、上記の方法は諦めxerces-cをダウングレードすることとした。
sudo downgrade xerces-c
しばらくは/etc/pacman.conf
のIgnorePkg
にxerces-c
を指定しておくとよい。
[options]
IgnorePkg = xerces-c
これで起動できるようになった。