使用静态 glibc 编译 Mono (linux)
Compiling Mono (linux) with static glibc
是否可以为静态引用 glibc 的 linux 编译 mono?我需要在没有所需 glibc 2.15(或更高版本)的旧 OS 上 运行 单声道。
更新 1
我已经为要发送到 compiler/linker 的标志设置了所有环境变量。
# echo $CFLAGS
-static-libgcc -static-libstdc++
这是来自 ./configure --help
的单声道帮助。我已将所有 *FLAGS 设置为上述值。
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CCAS assembler compiler command (defaults to CC)
CCASFLAGS assembler compiler flags (defaults to CFLAGS)
CPP C preprocessor
CXXCPP C++ preprocessor
XMKMF Path to xmkmf, Makefile generator for X Window System
将所有环境变量设置为静态 link libgcc 和 libstdc++ 后,我 运行 以下命令。
# ./configuire --prefix=/usr/local/mono
# make
# make install
第一个命令的输出结果表明它已经得到了我的标志...
configure: running /bin/sh ./configure --disable-option-checking '--prefix=/usr/local/mono' 'CFLAGS=-static-libgcc -static-libstdc++' 'LDFLAGS=-static-libgcc -static-libstdc++' 'CPPFLAGS=-static-libgcc -static-libstdc++' 'CXXFLAGS=-static-libgcc -static-libstdc++' 'CPPFLAGS_FOR_EGLIB=' 'CFLAGS_FOR_EGLIB=-static-libgcc -static-libstdc++' '--disable-embed-check' '--with-libgc-threads=pthreads' '--enable-parallel-mark' 'CPPFLAGS_FOR_LIBGC=-static-libgcc -static-libstdc++ -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -D_FILE_OFFSET_BITS=64 -DUSE_COMPILER_TLS -static-libgcc -static-libstdc++' 'CFLAGS_FOR_LIBGC=-static-libgcc -static-libstdc++ -Wno-deprecated-declarations -g -mno-tls-direct-seg-refs' --cache-file=/dev/null --srcdir=.
...但是,在输出上执行 ldd 表明它不是静态的 link glibc。
# ldd /usr/local/mono/bin/mono
linux-gate.so.1 (0xb77a2000)
libm.so.6 => /usr/lib/libm.so.6 (0xb773a000)
librt.so.1 => /usr/lib/librt.so.1 (0xb7731000)
libdl.so.2 => /usr/lib/libdl.so.2 (0xb772c000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0xb7710000)
libc.so.6 => /usr/lib/libc.so.6 (0xb7557000)
/lib/ld-linux.so.2 (0xb77a3000)
我希望看到 libc.so.6
此时嵌入。
如何针对所有这些共享库静态获取单声道 linking?
更新 2
这是我的构建命令的输出。
# ./configure --prefix=/usr/local/mono
# make
# make install
Libc >= 2.15 实际上并不是 Mono 所要求的。几秒钟前,我使用 libc=2.13 在 Debian Wheezy 上构建并测试了最新的 Mono — 没问题。
你可以通过阅读packages info from official mono repository来查看,例如:
Package: mono-2.0-gac
Source: mono
Version: 3.12.0-0xamarin3
Architecture: all
Maintainer: Debian Mono Group <pkg-mono-group@lists.alioth.debian.org>
Installed-Size: 65
Depends: libc6 (>= 2.13) | libc6.1 (>= 2.13) | libc0.1 (>= 2.13), libmono-corlib2.0-cil (>= 3.2.8), libmono-security2.0-cil (>= 3.0.6)
是否可以为静态引用 glibc 的 linux 编译 mono?我需要在没有所需 glibc 2.15(或更高版本)的旧 OS 上 运行 单声道。
更新 1
我已经为要发送到 compiler/linker 的标志设置了所有环境变量。
# echo $CFLAGS
-static-libgcc -static-libstdc++
这是来自 ./configure --help
的单声道帮助。我已将所有 *FLAGS 设置为上述值。
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
nonstandard directory <lib dir>
LIBS libraries to pass to the linker, e.g. -l<library>
CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CCAS assembler compiler command (defaults to CC)
CCASFLAGS assembler compiler flags (defaults to CFLAGS)
CPP C preprocessor
CXXCPP C++ preprocessor
XMKMF Path to xmkmf, Makefile generator for X Window System
将所有环境变量设置为静态 link libgcc 和 libstdc++ 后,我 运行 以下命令。
# ./configuire --prefix=/usr/local/mono
# make
# make install
第一个命令的输出结果表明它已经得到了我的标志...
configure: running /bin/sh ./configure --disable-option-checking '--prefix=/usr/local/mono' 'CFLAGS=-static-libgcc -static-libstdc++' 'LDFLAGS=-static-libgcc -static-libstdc++' 'CPPFLAGS=-static-libgcc -static-libstdc++' 'CXXFLAGS=-static-libgcc -static-libstdc++' 'CPPFLAGS_FOR_EGLIB=' 'CFLAGS_FOR_EGLIB=-static-libgcc -static-libstdc++' '--disable-embed-check' '--with-libgc-threads=pthreads' '--enable-parallel-mark' 'CPPFLAGS_FOR_LIBGC=-static-libgcc -static-libstdc++ -DGC_LINUX_THREADS -D_GNU_SOURCE -D_REENTRANT -DUSE_MMAP -DUSE_MUNMAP -g -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wno-cast-qual -Wwrite-strings -Wno-switch -Wno-switch-enum -Wno-unused-value -D_FILE_OFFSET_BITS=64 -DUSE_COMPILER_TLS -static-libgcc -static-libstdc++' 'CFLAGS_FOR_LIBGC=-static-libgcc -static-libstdc++ -Wno-deprecated-declarations -g -mno-tls-direct-seg-refs' --cache-file=/dev/null --srcdir=.
...但是,在输出上执行 ldd 表明它不是静态的 link glibc。
# ldd /usr/local/mono/bin/mono
linux-gate.so.1 (0xb77a2000)
libm.so.6 => /usr/lib/libm.so.6 (0xb773a000)
librt.so.1 => /usr/lib/librt.so.1 (0xb7731000)
libdl.so.2 => /usr/lib/libdl.so.2 (0xb772c000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0xb7710000)
libc.so.6 => /usr/lib/libc.so.6 (0xb7557000)
/lib/ld-linux.so.2 (0xb77a3000)
我希望看到 libc.so.6
此时嵌入。
如何针对所有这些共享库静态获取单声道 linking?
更新 2
这是我的构建命令的输出。
# ./configure --prefix=/usr/local/mono
# make
# make install
Libc >= 2.15 实际上并不是 Mono 所要求的。几秒钟前,我使用 libc=2.13 在 Debian Wheezy 上构建并测试了最新的 Mono — 没问题。
你可以通过阅读packages info from official mono repository来查看,例如:
Package: mono-2.0-gac
Source: mono
Version: 3.12.0-0xamarin3
Architecture: all
Maintainer: Debian Mono Group <pkg-mono-group@lists.alioth.debian.org>
Installed-Size: 65
Depends: libc6 (>= 2.13) | libc6.1 (>= 2.13) | libc0.1 (>= 2.13), libmono-corlib2.0-cil (>= 3.2.8), libmono-security2.0-cil (>= 3.0.6)