如何静态编译lighttpd模块
how to compile lighttpd modules statically
我目前已经从源代码编译了 lighttpd
./configure --prefix=/home/lighttpd \
--without-pcre \
--without-zlib \
--without-bzip2
我也尝试了 -enable-static --disable-shared 选项,但模块仍然从 lib 目录加载
我想在单个二进制文件中编译所有 lighttpd 模块,而不是从 lib 目录加载,该怎么做?
用标志 -DLIGHTTPD_STATIC 编译它。如果 gcc 会警告您有关语法的信息,请强制将 gcc 解释为 C99 标准:
make CFLAGS=-DLIGHTTPD_STATIC -std=c99
您还必须更改 src/Makefile.in 由 configure 生成以添加您想要包含的模块。具体来说,添加到 am__liblightcomp_la_SOURCE_DIST、am__lighttpd_SOURCES_DIST 和 common_src:
mod_access.c mod_staticfile.c
并添加对象。
到 am__objects_1 和 am__objects_2
mod_access.$(OBJEXT) mod_staticfile.$(OBJEXT)
如果 src/plugin-static.h 文件不可用,更改 src/plugin.c 文件,找到行 #include "plugin-static.h",注释并在下面添加:
PLUGIN_INIT(mod_access)
PLUGIN_INIT(mod_staticfile)
交叉发布到 https://redmine.lighttpd.net/boards/3/topics/6615
Lighttpd 可以使用 SCons 或使用 make 静态构建。简而言之:
缺点:
$ scons -j 4 build_static=1 build_dynamic=0 prefix=/custom/inst/path install
制作:
# 编辑 src/Makefile.am 并在 'if LIGHTTPD_STATIC' 下的部分中,更新 lighttpd_SOURCES 每个要包含在静态构建中的模块,或者只使用已经存在的整个列表那里
$ LIGHTTPD_STATIC=yes ./configure -C --enable-static=yes
$制作
https://redmine.lighttpd.net/boards/3/topics/5912
中有更多详细信息
[编辑] 要使用 'make' 静态构建,请使用 lighttpd git 主分支或 lighttpd 1.4.40+
lighttpd
的文档解释说,使用 build_static
只会导致它用自己的模块(mod_*.so
文件)静态 linked。它仍然会动态 link 外部依赖项(/lib*/*
中的依赖项)。
如果您没有混淆这些,关于您的体验:
I also tried -enable-static --disable-shared option, but modules still loading from lib directory
你想要的只是将这些模块静态包含在 lighttpd
二进制文件中,那么其他答案应该是正确和有效的。
但是,如果你想要一个单一的二进制文件,那么就没有外部动态依赖。然后你需要同时使用 scons
并将 build_static=1
替换为 build_fullstatic=1
。 Makefile
安装程序没有此选项。
build_static=1
scons -j 4 build_static=1 build_dynamic=0
使用ldd
显示需要哪些动态库:
ldd sconsbuild/static/build/lighttpd
linux-vdso.so.1 (0x00007fff0478f000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f760191e000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f76018e4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f76016bc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7601a5a000)
PS: 如果你构建了一个共享版本,mod_*.so
文件仍然不会出现在这里,因为它们是从内部延迟加载的根据您的配置文件执行 lighttpd
。
build_fullstatic=1
scons -j 4 build_fullstatic=1 build_dynamic=0
ldd sconsbuild/fullstatic/build/lighttpd
not a dynamic executable
这就是我想你想看到的。
我目前已经从源代码编译了 lighttpd
./configure --prefix=/home/lighttpd \
--without-pcre \
--without-zlib \
--without-bzip2
我也尝试了 -enable-static --disable-shared 选项,但模块仍然从 lib 目录加载
我想在单个二进制文件中编译所有 lighttpd 模块,而不是从 lib 目录加载,该怎么做?
用标志 -DLIGHTTPD_STATIC 编译它。如果 gcc 会警告您有关语法的信息,请强制将 gcc 解释为 C99 标准:
make CFLAGS=-DLIGHTTPD_STATIC -std=c99
您还必须更改 src/Makefile.in 由 configure 生成以添加您想要包含的模块。具体来说,添加到 am__liblightcomp_la_SOURCE_DIST、am__lighttpd_SOURCES_DIST 和 common_src:
mod_access.c mod_staticfile.c
并添加对象。 到 am__objects_1 和 am__objects_2
mod_access.$(OBJEXT) mod_staticfile.$(OBJEXT)
如果 src/plugin-static.h 文件不可用,更改 src/plugin.c 文件,找到行 #include "plugin-static.h",注释并在下面添加:
PLUGIN_INIT(mod_access)
PLUGIN_INIT(mod_staticfile)
交叉发布到 https://redmine.lighttpd.net/boards/3/topics/6615
Lighttpd 可以使用 SCons 或使用 make 静态构建。简而言之:
缺点:
$ scons -j 4 build_static=1 build_dynamic=0 prefix=/custom/inst/path install
制作:
# 编辑 src/Makefile.am 并在 'if LIGHTTPD_STATIC' 下的部分中,更新 lighttpd_SOURCES 每个要包含在静态构建中的模块,或者只使用已经存在的整个列表那里
$ LIGHTTPD_STATIC=yes ./configure -C --enable-static=yes
$制作
https://redmine.lighttpd.net/boards/3/topics/5912
[编辑] 要使用 'make' 静态构建,请使用 lighttpd git 主分支或 lighttpd 1.4.40+
lighttpd
的文档解释说,使用 build_static
只会导致它用自己的模块(mod_*.so
文件)静态 linked。它仍然会动态 link 外部依赖项(/lib*/*
中的依赖项)。
如果您没有混淆这些,关于您的体验:
I also tried -enable-static --disable-shared option, but modules still loading from lib directory
你想要的只是将这些模块静态包含在 lighttpd
二进制文件中,那么其他答案应该是正确和有效的。
但是,如果你想要一个单一的二进制文件,那么就没有外部动态依赖。然后你需要同时使用 scons
并将 build_static=1
替换为 build_fullstatic=1
。 Makefile
安装程序没有此选项。
build_static=1
scons -j 4 build_static=1 build_dynamic=0
使用ldd
显示需要哪些动态库:
ldd sconsbuild/static/build/lighttpd
linux-vdso.so.1 (0x00007fff0478f000)
libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f760191e000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f76018e4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f76016bc000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7601a5a000)
PS: 如果你构建了一个共享版本,mod_*.so
文件仍然不会出现在这里,因为它们是从内部延迟加载的根据您的配置文件执行 lighttpd
。
build_fullstatic=1
scons -j 4 build_fullstatic=1 build_dynamic=0
ldd sconsbuild/fullstatic/build/lighttpd
not a dynamic executable
这就是我想你想看到的。