タグ付けされた質問 「shared-libraries」

共有ライブラリは、起動時にプログラムによって読み込まれるライブラリです。各ライブラリの単一の共有コピーが物理メモリに読み込まれ、複数のプロセスで同時に使用できます。これにより、メモリの使用量が減り、システムのパフォーマンスが向上します。このタグを単独で使用しないでください。




19
共有ライブラリのロード中のLinuxエラー:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません
プログラムはXenomaiテストスイートの一部であり、Linux PCからLinux + Xenomai ARMツールチェーンにクロスコンパイルされています。 # echo $LD_LIBRARY_PATH /lib # ls /lib ld-2.3.3.so libdl-2.3.3.so libpthread-0.10.so ld-linux.so.2 libdl.so.2 libpthread.so.0 libc-2.3.3.so libgcc_s.so libpthread_rt.so libc.so.6 libgcc_s.so.1 libstdc++.so.6 libcrypt-2.3.3.so libm-2.3.3.so libstdc++.so.6.0.9 libcrypt.so.1 libm.so.6 # ./clocktest ./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory 編集: OK末尾の.1がファイル名の一部であることに気づきませんでした。とにかくそれはどういう意味ですか?

1
.so、.la、および.aライブラリファイルの違いは何ですか?
私は.soファイルが一種の動的ライブラリであることを知っています(多くのスレッドがそのようなライブラリを共有できるため、メモリに複数のコピーを保持する必要はありません)。しかし、違いは何である.aとは.la?これらはすべて静的ライブラリですか? 動的ライブラリに静的ライブラリよりも大きな利点がある場合、なぜ静的ライブラリがまだたくさんあるのですか? また、ライブラリ(両方の種類)をロードするための基本的なメカニズムと、ライブラリのコードがどこかで使用されたときにどのように呼び出されるかについても知りたいです。カーネルのどの部分を調べればよいですか?そして、プロセスがどのように実行されているかを知るために、関連するどのLinuxコマンド/ユーティリティを知っておくべきですか?(私はld今までにコマンドを知っています) いつ、.soまたはにコードをビルドする必要があり.aますか?どちらがいいですか? [mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l total 96 -rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a -rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la -rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so -rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a -rwxr-xr-x 1 mirror …



7
ldは既存のライブラリを見つけることができません
このDebian lennyシステムでアプリケーションをg ++とリンクしようとしています。ldは、指定されたライブラリーを見つけられないと不平を言っています。ここでの具体的な例はImageMagickですが、他のいくつかのライブラリでも同様の問題が発生しています。 私はリンカーを次のように呼び出しています: g++ -w (..lots of .o files/include directories/etc..) \ -L/usr/lib -lmagic ldは文句を言う: /usr/bin/ld: cannot find -lmagic ただし、libmagicは存在します。 $ locate libmagic.so /usr/lib/libmagic.so.1 /usr/lib/libmagic.so.1.0.0 $ ls -all /usr/lib/libmagic.so.1* lrwxrwxrwx 1 root root 17 2008-12-01 03:52 /usr/lib/libmagic.so.1 -> libmagic.so.1.0.0 -rwxrwxrwx 1 root root 84664 2008-09-09 00:05 /usr/lib/libmagic.so.1.0.0 $ ldd /usr/lib/libmagic.so.1.0.0 …

4
Linux上のC ++動的共有ライブラリ
これは、g ++による動的共有ライブラリのコンパイルのフォローアップです。 LinuxのC ++で共有クラスライブラリを作成しようとしています。ライブラリをコンパイルして、こことここで見つけたチュートリアルを使用して、いくつかの(非クラス)関数を呼び出すことができます。ライブラリで定義されているクラスを使用しようとすると、問題が発生します。私がリンクした2番目のチュートリアルは、ライブラリーで定義されたクラスのオブジェクトを作成するためのシンボルをロードする方法を示していますが、これらのオブジェクトを使用して作業を完了することはできません。 別の実行可能ファイルでこれらのクラスを使用する方法も示す、共有C ++クラスライブラリを作成するためのより完全なチュートリアルを知っている人はいますか?オブジェクトの作成、使用(単純なゲッターとセッターで結構です)、そして削除が素晴らしい素晴らしいチュートリアルです。共有クラスライブラリの使用を示すいくつかのオープンソースコードへのリンクまたは参照も同様に良いでしょう。 codelogicとnimrodmからの回答は機能しますが、この質問をして以来、Beginning Linux Programmingのコピーを選んだことを追加したいと思います。最初の章には、Cライブラリの例と、静的ライブラリと共有ライブラリの両方を作成および使用するための適切な説明があります。 。これらの例は、Googleブック検索を介して、その本の古い版で利用できます。

1
gccコマンドラインを使用して.cファイルから.soファイルをビルドする
Linuxダイナミックライブラリ(.soファイル)のHello Worldプロジェクトを作成しようとしています。だから私はファイルhello.cを持っています: #include <stdio.h> void hello() { printf("Hello world!\n"); } hello()コマンドラインからgccを使用して、エクスポートする.soファイルを作成するにはどうすればよいですか?
162 c  linux  gcc  shared-libraries 

4
CからGo関数を呼び出す
Cプログラム(たとえば、カーネルモジュールなど)とのインターフェイスとしてGoで記述された静的オブジェクトを作成しようとしています。 GoからのC関数の呼び出しに関するドキュメントは見つかりましたが、他の方法についてはあまりわかりません。私が見つけたのは、それは可能ですが複雑であるということです。 これが私が見つけたものです: CとGo間のコールバックに関するブログ投稿 Cgoのドキュメント Golangメーリングリストの投稿 誰もがこれを経験していますか?つまり、完全にGoで記述されたPAMモジュールを作成しようとしています。

4
cmakeで共有ライブラリを作成する方法は?
自分で作成したMakefileを使用してコンパイルするために使用するライブラリを作成しましたが、今度はcmakeに切り替えます。ツリーは次のようになります(関係のないファイルをすべて削除しました)。 . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp だから私がやろうとしていることは、ソースを共有ライブラリにコンパイルし、それをヘッダーファイルと一緒にインストールすることです。 私が見つけたほとんどの例は、いくつかの共有ライブラリを使用して実行可能ファイルをコンパイルしますが、単純な共有ライブラリだけではありません。cmakeを使用する非常に単純なライブラリーを誰かに教えてもらえれば、これも例として使用できるので参考になります。


7
Pythonがsys.pathのディレクトリにある共有オブジェクトを見つけられないのはなぜですか?
インポートしようとしていpycurlます: $ python -c "import pycurl" Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: libcurl.so.4: cannot open shared object file: No such file or directory 現在、にlibcurl.so.4あり/usr/local/libます。ご覧のとおり、これは次の場所にありsys.pathます。 $ python -c "import sys; print(sys.path)" ['', '/usr/local/lib/python2.5/site-packages/setuptools-0.6c9-py2.5.egg', '/usr/local/lib/python25.zip', '/usr/local/lib/python2.5', '/usr/local/lib/python2.5/plat-linux2', '/usr/local/lib/python2.5/lib-tk', '/usr/local/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/sitepackages', '/usr/local/lib', '/usr/local/lib/python2.5/site-packages'] どんな助けでも大歓迎です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.