通常、Debian ではリポジトリからエントリをインストールすると正常に動作します。仕事を整理し、人生が美しいです。これは、リポジトリに最新のコンテンツを保持するのに役立ちます。
私はいくつかのツールを作成しており、githubまたはMercurialで手動で更新したいと思います。
cmakeまたは設定スクリプトを使用してコードをビルドすると問題なく動作し、必要に応じてパッケージを簡単に削除または更新できるように、独自のプレフィックスパスも追加しました。
MercurialでSDL2をビルドして/opt/SDL2にインストールし、私のパスに追加しました。 SDL_imageをビルドするには、これを行う必要があります。
プロセスが完了した後、次のような結果が出ました。
Libraries have been installed in:
/opt/SDL_IMAGE/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the `LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the `LD_RUN_PATH' environment variable
during linking
- use the `-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
上記の出力には多くのことが記載されており、それを解析する方法がわかりません。以前は、Macを使用すると作業が簡単になりましたが、Linuxにはいくつかの問題があります。
上記のコードを読みながら、bashrcファイルにこのような内容を追加する必要があることに気づきました。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/SDL_IMAGE/lib
export LD_RUN_PATH=$LD_RUN_PATH:/opt/SDL_IMAGE/lib
sdl画像ヘッダーにリンクすると、あなたが見つけることができるようにbashrcに追加しますか? ldのマニュアルページを見てみましたが、正直理解していないので尋ねます。
具体的には、次の行は: `-Wl、-rpath -Wl、LIBDIR'リンカーフラグを使用してください。
答え1
Mac OS X の Xcode と Fink|Homebrew|MacPorts は、このような複雑さを持っています(ほとんどのユーザーに隠すだけです)。この問題には、コンパイルと実行の2つの側面があります。コンパイルするには、カスタムパスにインストールされているすべてのライブラリに関するさまざまな詳細が必要です。一部のライブラリに関するこの情報は、pkg-config
ホームディレクトリに保持する小さなソフトウェアライブラリなどから提供できます。
$ ls ~/usr/rhel6-x86_64/lib/pkgconfig/
goptfoo.pc jkiss.pc libsodium.pc
$ echo $PKG_CONFIG_PATH
/homes/jdoe/usr/rhel6-x86_64/lib/pkgconfig
$ pkg-config --libs --cflags libsodium
-I/homes/jdoe/usr/rhel6-x86_64/include -L/homes/jdoe/usr/rhel6-x86_64/lib -lsodium
$
これらのマジック文字列は、カスタムインストールツリーのライブラリ用に構築されたすべてのソフトウェアのコンパイルプロセスに入力する必要があります。詳細Makefile
は可否などによりautotools
異なります。cmake
簡単な方法は、出力をCFLAGS
含めるように設定するpkg-config
か、ビルドラインに出力を含めることです。
mkpwhash: mkpwhash.c
gcc -std=gnu99 `pkg-config --cflags --libs libsodium` -lcrypt -Werror -Wall -Wextra -Wundef -ftrapv -fstack-protector-all -pedantic -pipe -o mkpwhash mkpwhash.c
autotools
または、ケースでは、バッグの既存の構成を調べるなど、特定のcmake
玉ねぎをベルトに取り付ける方法をさらに詳しく調べる必要があります。configure.ac
autotools
カスタムパスで共有ライブラリを使用するようにコンパイルされたプログラムを実行するには、以下をLD_LIBRARY_PATH
設定(またはシステム全体でバイオリンを使用ld.so.conf
)するだけで十分です。
$ unset LD_LIBRARY_PATH
$ ldd ~/usr/rhel6-x86_64/bin/mkpwhash | grep sodium
libsodium.so.13 => not found
$ exec $SHELL
$ echo $LD_LIBRARY_PATH
/homes/jdoe/usr/rhel6-x86_64/lib
$ ldd ~/usr/rhel6-x86_64/bin/mkpwhash | grep sodium
libsodium.so.13 => /homes/jdoe/usr/rhel6-x86_64/lib/libsodium.so.13 (0x00007e5c12ca7000)
$
(これはUnixです。角質を取り除く方法はいくつかあります。グルニソしたがって、ビルドプロセスの出力に「少なくとも1つ...」という提案が表示されます。より洗練されたソフトウェアライブラリを使用できます。stow
あるいは、自分にどれだけのロープ(そしてそれに伴う頭痛)を与えたいかによって似ています。 )