koijigen / question-and-answer

0 stars 0 forks source link

In generally, how to fix an error about `cannot open shared object file`? #3

Open koijigen opened 1 year ago

koijigen commented 1 year ago
    In generally, how to fix an error about `cannot open shared object file`?

Originally posted by @koijigen in https://github.com/koijigen/question-and-answer/issues/1#issuecomment-1309859748

koijigen commented 1 year ago

Is this useful? : https://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s

koijigen commented 1 year ago

In issue #1, an error had caused by that didn't installed a package that include library (~ shared object file).

Thus, installing the package was way to fix the error.

It is special case about how to fix an error about ~.

koijigen commented 1 year ago

This issue's origin issue had closed, however I decided to consider this issue still open, because:

  1. This issue's title is asking about generally case.
  2. The way I found is about special case, not generlly.

    In issue #1, an error had caused by that didn't installed a package that include library (~ shared object file).

    Thus, installing the package was way to fix the error.

    It is special case about how to fix an error about ~.

koijigen commented 1 year ago

I will close this issue, when I am sutisfied my answer or reach the time to clean up issues list.

koijigen commented 1 year ago

蛇足

このイシューについて活動する中で、イシューを開く前にイシューを閉じる条件を決めておきたい、と感じた。

なぜなら、「その条件を決めなければ、いずれイシューが沢山詰まったリストに押しつぶされてしまうかもしれない」と感じたから。

このイシューを開く前にはその条件を決めていなかった。

これに対する対策を考える必要があると思う。

例えば、イシューを立てる前には必ずそのイシューを閉じる条件を決める(ハードモード)、とか、閉じる条件を決められないイシューしか思いつかない時にはそのイシューにラベル({イシューをクローズするための活動の中で、「気づき」(=「閉じられる単数/複数個のイシューに変換できそうだ」)が得られた時に変換して新しいイシューを立てて元のイシューはクローズするか、{「気づき」が得られなかった && 発生源のイシューが存在する}場合は発生源のイシューがクローズしたら諦めてこのイシューもクローズするか}というアクションを行う対象であるということを示すためのラベル)を付けておく(ノーマルモード)、とか、一律でどのイシューも一定期間オープンが継続したらクローズする(イージーモード)、発生源のイシューがあるイシューについては発生源のイシューが閉じたタイミングを意思決定(多少情報損失があっても閉じられるイシューに変換する、もしくは、イシューをうまくまとめて知識化もしくは知識の呼び水に変換してPKMに登録する)タイミングと決めて何かアクションをする(エクストラモード)、とか。

加えて、イシュー管理についての自分なりのセオリーを構築するための、メタプロジェクト的なものをGithub上に作っておきたくなってきた。

I will close this issue, when I am sutisfied my answer or reach the time to clean up issues list.

ここで言っている満足するのがいつになるのかわからないし、イシューリストを整理整頓する適切なタイミングというのもまだつかめていないし経験を積めば掴める類のものなのかハッキリしていない。そうした希望的観測にのみ基づいて負債を抱え込んでいるのではないか、といった不安が残る。

そもそもイシューのタイトルに"In generally"とか入っているとか悪い匂いがしている。

閉じにくいイシューであるかどうかの判断のために、こういったワード("In generally"など)がタイトルに含まれているかどうかを観るのは一つの手だと思う。

あるいは、閉じにくいイシューを閉じやすいイシューに変換する際に、ワードごとに定石を見出すことができるかもしれない。例えば、今回は「"In generally, ..."は"In the case of A, ..."に変換するとよい」みたいな定石に当てはまるよ、とか(ただし、今回のが本当にこの定石に当てはまっているかとか、そもそもこの定石が成り立つかの保証はできない。あくまで「例えば」の話)。

koijigen commented 1 year ago

Is this useful? : https://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot-open-shared-object-file-no-s

Probablly, the following answer is usefull in the post.

Here are a few solutions you can try:

ldconfig

As AbiusX pointed out: If you have just now installed the library, you may simply need to run ldconfig.

sudo ldconfig

ldconfig creates the necessary links and cache to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories (/lib and /usr/lib).

Usually your package manager will take care of this when you install a new library, but not always, and it won't hurt to run ldconfig even if that is not your issue.

Dev package or wrong version

If that doesn't work, I would also check out Paul's suggestion and look for a "-dev" version of the library. Many libraries are split into dev and non-dev packages. You can use this command to look for it:

apt-cache search <libraryname>

This can also help if you simply have the wrong version of the library installed. Some libraries are published in different versions simultaneously, for example, Python.

Library location

If you are sure that the right package is installed, and ldconfig didn't find it, it may just be in a nonstandard directory. By default, ldconfig looks in /lib, /usr/lib, and directories listed in /etc/ld.so.conf and $LD_LIBRARY_PATH. If your library is somewhere else, you can either add the directory on its own line in /etc/ld.so.conf, append the library's path to $LD_LIBRARY_PATH, or move the library into /usr/lib. Then run ldconfig.

To find out where the library is, try this:

sudo find / -iname *libraryname*.so*

(Replace libraryname with the name of your library)

If you go the $LD_LIBRARY_PATH route, you'll want to put that into your ~/.bashrc file so it will run every time you log in:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

Answerd by ammo.