Сборка всех статических клиентов SVN на Mac OSX, ошибка на mod_dav_svn.so
Я пытаюсь собрать клиент SVN на Mac OS 10.7.5. Моя цель состоит в том, чтобы сделать svn-клиент полностью статичным, чтобы он не зависел от устанавливаемой библиотеки. Идея заключается в том, что клиент SVN может быть скопирован на диск по ключу или загружен и будет работать без необходимости устанавливать или настраивать что-либо.
Я скачал исходный код svn (subversion-1.7.8) и все необходимые зависимости (apr, par-util, neon, sqlite-amalgamation) и указал цикл установки - make - make.
Параметр конфигурации Svn имеет флаг --enable-all-static, который создает клиент SVN, который не зависит от внешних библиотек. Однако сборка всегда завершается неудачей со следующим сообщением:
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 ответ
По моему опыту может быть сложно компилировать приложения, использующие сторонние библиотеки и / или системные библиотеки, такие как glibc и т. Д. Проблема в том, что в дополнение к статическому построению вашего приложения все эти библиотеки должны обеспечивать как динамический (.so) версия, а также статическая версия (.a) и некоторые библиотеки просто не предоставляют этого, по крайней мере, не легко. Таким образом, вы вынуждены сами скомпилировать все в стек зависимостей, и это может быть сложно.
Это, как говорится здесь, любезно предоставлено в блоге Рика 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 через http
а также https
!
ПРИМЕЧАНИЕ № 2: Если вы посмотрите на вывод из svn --version
Команда вы можете увидеть, какие модули доступа к хранилищу (RA) были скомпилированы в ваш svn
клиент.