6

Mac OS 10.7.5 で svn クライアントをビルドしようとしています。私の目的は、svn クライアントを完全に静的に構築して、インストールする dylib に依存しないようにすることです。アイデアは、svn クライアントをキー上のディスクにコピーするかダウンロードすることができ、何もインストールまたは構成する必要なく動作するということです。

svn ソース コード (subversion-1.7.8) と必要なすべての依存関係 (apr、par-util、neon、sqlite-amalgamation) をダウンロードし、configure - make - make install サイクルを説明しました。

Svn の configure オプションには、外部の dylib に依存しない svn クライアントを作成する--enable-all-staticフラグがあります。ただし、ビルドは常に次のメッセージで失敗します。

Warning!  dlname not found in /Volumes/mydisk/build/svn/libexec/mod_dav_svn.la.
Assuming installing a .so rather than a libtool archive.
chmod 755 /Volumes/mydisk/build/svn/libexec/mod_dav_svn.so
chmod: /Volumes/mydisk/wsvn/build/svn/libexec/mod_dav_svn.so: No such file or directory
apxs:Error: Command failed with rc=65536
.
make: *** [install-mods-shared] Error 1

mod_dav_svn.so が必要なく、すべてが静的にコンパイルされる場合でも、ビルドは mod_dav_svn.so を探しているようです。

面白いことに、ビルドされた svn クライアントが実際に実行されます。ただし、ビルドとインストールを適切に完了したいと思います。

私の質問は次のとおりです。

  1. このビルド エラーは本当のものですか、それとも単に無視できるものですか?
  2. ビルドを完了するために、このビルド エラーを回避するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

私の経験では、サードパーティのライブラリや glibc などのシステム ライブラリを使用するアプリケーションをコンパイルするのは難しい場合があります。 .so) バージョンと静的バージョン (.a) および一部のライブラリは、少なくとも簡単にはこれを提供しません。そのため、依存関係のスタックをすべて自分でコンパイルする必要があり、これは難しい場合があります。

ここで言われていることは、Rick Vanderzwet のブログの厚意によるものです。

% curl -O wget http://archive.apache.org/dist/subversion/subversion-1.7.8.tar.gz
% tar zxvf subversion-1.7.8.tar.gz
% cd subversion-1.7.8/
% ./get-deps.sh
% ./configure --with-ssl --without-gssapi --without-swig --enable-all-static
% make

次のコマンドで確認します。

実行可能ファイルのサイズ?

% ls -lh subversion/svn/svn
-rwxrwxr-x 1 saml saml 11M Jan 19 22:09 subversion/svn/svn

実行可能な実行?

% subversion/svn/svn --version
svn, version 1.7.8 (r1419691)
   compiled Jan 19 2013, 22:03:50

Copyright (C) 2012 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - handles 'http' scheme
  - handles 'https' scheme

実行可能ファイルは何に依存していますか?

%  ldd subversion/svn/svn
    linux-vdso.so.1 =>  (0x00007fffd7463000)
    libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00000034fc600000)
    libm.so.6 => /lib64/libm.so.6 (0x00000034e7600000)
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x0000003210800000)
    libcrypto.so.10 => /lib64/libcrypto.so.10 (0x000000399a000000)
    libz.so.1 => /lib64/libz.so.1 (0x00000034e8600000)
    libmagic.so.1 => /usr/lib64/libmagic.so.1 (0x00000034ef600000)
    libexpat.so.1 => /lib64/libexpat.so.1 (0x00000034eb200000)
    libuuid.so.1 => /lib64/libuuid.so.1 (0x00000034eda00000)
    librt.so.1 => /lib64/librt.so.1 (0x00000034e8a00000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000034f5e00000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00000034e7e00000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000034e7a00000)
    libc.so.6 => /lib64/libc.so.6 (0x00000034e7200000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00000034ea200000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000000320f800000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x0000003210000000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x0000003d3ce00000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x0000003210400000)
    /lib64/ld-linux-x86-64.so.2 (0x00000034e6e00000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00000034f6200000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x000000320fc00000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00000034f3a00000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00000034e8e00000)

この最後のビットは、この実行可能ファイルがまだいくつかの動的ライブラリに依存していることを示していますが、典型的な動的に構築されたサブバージョンよりもはるかに少ないです!

編集#1

mod_dav_svnサポートが必要ない場合は、 への--without-serfスイッチを使用してこれを無効にすることができますconfigure

注 #1:このサポートを無効にすると、クライアントがおよび!svn経由で SVN リポジトリにアクセスできなくなります。httphttps

注 2:コマンドの出力を見ると、svn --versionどのリポジトリ アクセス(RA)モジュールがsvnクライアントにコンパイルされているかがわかります。

于 2013-01-20T02:44:03.503 に答える