Compilation 编译libptrace

Compilation 编译libptrace,compilation,libtool,Compilation,Libtool,正在尝试编译libptrace()。该项目没有公布任何首选的请求支持的方式(不幸的是,该项目没有指明获得帮助的最佳方式)。不管是谁,我遇到的问题如下: % ./build.sh % ...[SUCCESS] % ./configure % ...[SUCCESS] % make Making all in src make[2]: Entering directory `/home/xxx/build/libptrace-git.git/src' make[2]: *** No rule to

正在尝试编译libptrace()。该项目没有公布任何首选的请求支持的方式(不幸的是,该项目没有指明获得帮助的最佳方式)。不管是谁,我遇到的问题如下:

% ./build.sh
% ...[SUCCESS]
% ./configure
% ...[SUCCESS]
% make
Making all in src
make[2]: Entering directory `/home/xxx/build/libptrace-git.git/src'
make[2]: *** No rule to make target `../lib/libgnu.la', needed by `libptrace.la'.  Stop.
make[2]: Leaving directory `/home/xxx/build/libptrace-git.git/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/xxx/build/libptrace-git.git'
make: *** [all] Error 2
%
如果你在谷歌上搜索libptrace和libgnu.la,你的点击率为零。在源代码中对其进行Grepping take fresh of git,您将获得:

% grep -sre libgnu.la *
src/Makefile.in:libptrace_la_DEPENDENCIES = ../lib/libgnu.la
src/Makefile.in:libptrace_la_LIBADD = ../lib/libgnu.la
src/Makefile.am:libptrace_la_LIBADD = ../lib/libgnu.la
src/Makefile:libptrace_la_DEPENDENCIES = ../lib/libgnu.la
src/Makefile:libptrace_la_LIBADD = ../lib/libgnu.la
我不知道如何生成libtool归档文件,而且源代码似乎并没有任何make目标或脚本来执行此操作

关于管理的注意事项:请在这个问题上添加标签“libptrace”——这显然是一个非常流行的话题——我不能这样做,因为我没有达到1.5公里的分数:(


为了响应Mel对build.sh的修改,以下是在“make”上生成的新错误:

gcc -DHAVE_CONFIG_H -I. -I../.. -I../../src    -g -O2 -Wall -MT test-linux-dlsym.o -MD -MP -MF                     .deps/test-linux-dlsym.Tpo -c -o test-linux-dlsym.o test-linux-dlsym.c
mv -f .deps/test-linux-dlsym.Tpo .deps/test-linux-dlsym.Po
/bin/sh ../../libtool --tag=CC   --mode=link gcc  -g -O2 -Wall   -o test-linux-dlsym test-linux-dlsym.o            ../../src/libptrace.la 
libtool: link: gcc -g -O2 -Wall -o .libs/test-linux-dlsym test-linux-dlsym.o  ../../src/.libs/libptrace.so         -Wl,-rpath -Wl,/usr/local/lib
test-linux-dlsym.o: In function `main':
/home/XXX/dev/insecurity/build/libptrace-git/tests/linux/test-linux-dlsym.c:24: undefined reference to             `ptrace_elf_get_link_map_head'
/home/XXX/dev/insecurity/build/libptrace-git/tests/linux/test-linux-dlsym.c:40: undefined reference to             `ptrace_elf_get_link_map_next'
/home/XXX/dev/insecurity/build/libptrace-git/tests/linux/test-linux-dlsym.c:31: undefined reference to             `ptrace_elf_get_symtab'
/home/XXX/dev/insecurity/build/libptrace-git/tests/linux/test-linux-dlsym.c:32: undefined reference to             `ptrace_elf_get_strtab'
/home/XXX/dev/insecurity/build/libptrace-git/tests/linux/test-linux-dlsym.c:33: undefined reference to             `ptrace_elf_get_hash'
/home/XXX/dev/insecurity/build/libptrace-git/tests/linux/test-linux-dlsym.c:34: undefined reference to             `ptrace_elf_get_hash_chains'
collect2: ld returned 1 exit status
make[2]: *** [test-linux-dlsym] Error 1
make[2]: Leaving directory `/home/XXX/dev/insecurity/build/libptrace-git.git/tests/linux'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/XXX/dev/insecurity/build/libptrace-git.git'
make: *** [all] Error 2
这是gnulib:


它可以安装在Debian中,在Ubuntu 10.10上安装gnulib,gnulib是必需的,如上所述,可能还有一整套构建工具(autoconf,automake)

下面的补丁修复了构建git cc97c9e3d830bd1d567011ec099846343cef547a时发生的链接错误

diff——git a/src/Makefile.am b/src/Makefile.am 索引6de8cf2..5f8d9bc 100644 ---a/src/Makefile.am +++b/src/Makefile.am @@-23,8+23,8@@endif 如果目标是LINUX libptrace_la_SOURCES+=libptrace_linux.c libptrace_linux.h\ libptrace_wrapper.c libptrace_wrapper.h\ -libptrace_linux_procfs.c libptrace_linux_procfs.h -#libptrace_elf.c libptrace_elf.h
+libptrace_linux_procfs.c libptrace_linux_procfs.h\ +libptrace_elf.c libptrace_elf.h
libptrace_la_HEADERS+=libptrace_linux.h libptrace_wrapper.h 如果目标是I386 libptrace_la_SOURCES+=libptrace_linux_x86.c libptrace_linux_x86.h @@-38,8+38,8@@endif

如果目标_FREEBSD libptrace_la_SOURCES+=libptrace_freebsd.c libptrace_freebsd.h\ -libptrace_wrapper.c libptrace_wrapper.h
-#libptrace_elf.c libptrace_elf.h
+libptrace_wrapper.c libptrace_wrapper.h\ +libptrace_elf.c libptrace_elf.h
libptrace_la_HEADERS+=libptrace_freebsd.h libptrace_wrapper.h 如果目标是I386
libptrace_la_SOURCES+=libptrace_freebsd_x86.c libptrace_freebsd_x86.h

首先,这只适用于linux。如果您想在其他系统上使用,您需要在configure.ac中编写src/libptrace_config.h头,如
grep COMPILE_HDR configure.ac
所示

其次,我只需要下面的补丁就可以得到我的系统上缺少生成的头的地方

diff --git a/build.sh b/build.sh
index 81caf8a..cc195c4 100755
--- a/build.sh
+++ b/build.sh
@@ -1,7 +1,7 @@
 #!/bin/sh

 # Import gnulib modules which we use
-gnulib-tool --import stdint
+gnulib-tool --libtool --import stdint

 # Update timestamp to make sure autoconf rebuilds everything.
 touch configure.ac

据我所知,Ronald Huizer是该库的唯一主要开发人员。日志中有两个电子邮件地址:和。您是否尝试直接询问他?嗨,Mel,这有助于推进工作,但没有解决问题。我已将“---libtool”添加到build.sh中,并从新的git签出开始了该过程。gnulib工具是最新和最新的在$PATH中。我现在得到一组新的错误。另外,目标arch是一个64位Linux系统,只是为了缩小范围。我将把新的错误发回上面的问题部分。