尝试编译libptrace(http://sourceforge.net/projects/libptrace/)。该项目没有公布任何首选的请求支持方式(不幸的是,这个项目没有表明获得帮助的最佳方式)。 Anywho,我遇到的问题如下:
% ./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
%
如果您使用google libptrace和libgnu.la,则会获得零点击率。在源代码中获取它可以从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.5K点数:(
回应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
答案 0 :(得分:0)
这是gnulib:http://www.gnu.org/software/gnulib/
可以使用apt-get install gnulib
答案 1 :(得分:0)
建立在Ubuntu 10.10上,如上所述需要gnulib,可能还有一大堆构建工具(autoconf,automake)
以下补丁修复了构建git时发生的链接错误cc97c9e3d830bd1d567011ec099846343cef547a
diff --git a / src / Makefile.am b / src / Makefile.am
index 6de8cf2..5f8d9bc 100644
--- a / src / Makefile.am
+++ b / src / Makefile.am
@@ -23,8 +23,8 @@ endif
如果是TARGET_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
如果是TARGET_I386
libptrace_la_SOURCES + = libptrace_linux_x86.c libptrace_linux_x86.h
@@ -38,8 +38,8 @@ endif
如果是TARGET_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
如果是TARGET_I386
libptrace_la_SOURCES + = libptrace_freebsd_x86.c libptrace_freebsd_x86.h
答案 2 :(得分:0)
首先,这只适用于linux。如果您希望这在其他系统上运行,则需要在configure.ac中编写src / libptrace_config.h标头,grep COMPILE_HDR configure.ac
可以看到。
其次,我需要以下补丁来获得我的系统上缺少生成的标头的点。当然需要安装gnulib,gnulib-tool必须在$ PATH中。
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