我正在尝试从源代码构建gperf(Google的分析器)。在构建过程中出现以下错误:
src/stacktrace_config.h:58:5: error: #error Cannnot calculate stack trace: need either libunwind or frame-pointers (see INSTALL file)
src/stacktrace.cc:109:3: error: #error Cannot calculate stack trace: will need to write for your environment
make: *** [stacktrace.lo] Error 1
所以我觉得我需要libunwind
。
1)我从savannah的git repo获得了这个库。
2)将其安装在/opt/unwind
中。
3)我还在/opt/unwind/lib/pkgconfig
添加了PKG_CONFIG_PATH
。
4)我编辑了libunwind.pc
,以便pkg-config --cflags --libs libunwind
同时提供正确的值。
5)我在libunwind.conf
中添加了/etc/ld.so.conf.d/
,指向/opt/unwind/lib
。
完成所有这些后,我在./configure
根目录中重新运行gperf
。
config.log
读取以下内容:
configure:15852: checking libunwind.h usability
configure:15852: gcc -c -g -O2 conftest.c >&5
conftest.c:67:23: fatal error: libunwind.h: No such file or directory
compilation terminated.
configure:15852: result: no
<***snip****>
configure:15852: checking libunwind.h presence
configure:15852: gcc -E conftest.c
conftest.c:34:23: fatal error: libunwind.h: No such file or directory
compilation terminated.
<***snip***>
ac_cv_header_libunwind_h=no
所以似乎它仍然不知道libunwind
在哪里。
然后我尝试使用CFLAGS和LDFLAGS设置环境变量,如下所示:
arif@khost:~/src/gperf$ CFLAGS=`pkg-config --cflags libunwind` LDFLAGS=`pkg-config --libs libunwind` ./configure
现在config.log
似乎更令人费解:
configure:15852: checking libunwind.h usability
configure:15852: gcc -c -I/opt/unwind/include conftest.c >&5
configure:15852: $? = 0
configure:15852: result: yes
configure:15852: checking libunwind.h presence
configure:15852: gcc -E conftest.c
conftest.c:34:23: fatal error: libunwind.h: No such file or directory
compilation terminated.
首先报告有libunwind.h
但后来无法找到它。
config.log
也有这个奇怪的条目:
configure:15852: WARNING: libunwind.h: accepted by the compiler, rejected b y the preprocessor!
configure:15852: WARNING: libunwind.h: proceeding with the compiler's result
还提出ac_cv_header_libunwind_h=yes
如果我在make
这里停止,则会出现以下错误:
In file included from src/stacktrace.cc:65:0:
src/stacktrace_libunwind-inl.h:46:23: fatal error: libunwind.h: No such file or directory
compilation terminated.
make: *** [stacktrace.lo] Error 1
答案 0 :(得分:3)
您也需要libunwind
标题。安装libunwind-devel
软件包或同等软件包。
答案 1 :(得分:0)
类似于bwzhou的答案,我尝试遵循此SO问题中的答案:
How to add include and lib paths to configure/make cycle?
,并且在使用预先编译的libunwind-1.2.1编译gperftools时终于能够克服fatal error: libunwind.h: No such file or directory
错误。更具体地说,我使用以下命令设置CPPFLAGS和LDFLAGS:
export CPPFLAGS='-I'$MY_INSTALL_DIR'/include '$CPPFLAGS
export LDFLAGS='-L'$MY_INSTALL_DIR'/lib '$CPPFLAGS
在执行./configure --prefix=$MY_INSTALL_DIR
之前,其中$ MY_INSTALL_DIR是我的个人非标准目录,由于缺少足够的权限,我必须在其中使用我的HPC集群安装软件。完成之后,我能够成功执行make;进行安装。我希望这会有所帮助。
答案 2 :(得分:-1)
调用configure时尝试使用CPPFLAGS而不是CFLAGS。