首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Mac上构建所有静态svn客户端,在mod_dav_svn.so上生成错误

在Mac上构建所有静态svn客户端,在mod_dav_svn.so上生成错误
EN

Stack Overflow用户
提问于 2013-01-14 09:07:05
回答 1查看 1.9K关注 0票数 6

我试图在MacOS10.7.5上构建svn客户端。我的目标是构建完全静态的svn客户机,这样它就不会依赖于要安装的任何dylib。其想法是svn客户端可以复制到密钥上的磁盘,或者下载,并且无需安装或配置任何内容即可工作。

我下载了svn源代码(subversion-1.7.8)和所有所需的依赖项(apr、par、neon、subversion),并说明了configure make - make安装周期。

svn的配置选项有--enable-all-static标志,它创建不依赖外部dylib的svn客户端。但是,构建总是失败,其中包含以下消息:

代码语言:javascript
运行
复制
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,即使它是不需要的,而且所有的编译都是静态的。

有趣的是,构建的svn客户端实际上正在运行!不过,我想要正确地完成构建和安装。

我的问题是:

  1. 这个构建错误是一个真实的错误,还是我可以忽略的问题?
  2. 如何避免此生成错误,以完成生成?

谢谢

EN

Stack Overflow用户

回答已采纳

发布于 2013-01-20 02:44:03

根据我的经验,编译使用第三方库和/或系统库(如glibc等)的应用程序可能很棘手。问题是,除了静态构建应用程序之外,所有这些库都需要提供动态(.so)版本和静态版本(.a),而有些库只是不提供这一点,至少不容易。因此,您不得不自己编译所有依赖项堆栈,这可能会很困难。

这么说吧,礼貌的里克·范德兹韦特的博客

代码语言:javascript
运行
复制
% 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

使用以下命令确认:

可执行文件的大小?

代码语言:javascript
运行
复制
% ls -lh subversion/svn/svn
-rwxrwxr-x 1 saml saml 11M Jan 19 22:09 subversion/svn/svn

可执行的运行?

代码语言:javascript
运行
复制
% 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

可执行文件依赖于什么?

代码语言:javascript
运行
复制
%  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)

最后一段显示,这个可执行文件仍然依赖于几个动态库,但它比典型的动态构建的subversion要少得多!

编辑#1

如果不需要mod_dav_svn支持,可以通过使用--without-serf切换到configure来禁用它。

注1:禁用此支持将禁用您的svn客户端通过httphttps访问SVN repos的能力!

注释2:--如果您查看来自svn --version命令的输出,您可以看到哪个存储库访问(RA)模块已经编译到您的svn客户机中。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14315584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档