2

我做了一些更改,我正在尝试在 Mac OS X Yosemite 10.10.3 上编译google-perf(TCMalloc),我按照步骤 return here安装 gperf。但是,我得到以下链接错误。

./autogen.sh basically autoreconf -i -> successful no error

./configure -> successful no error

make -> below error

libtool: link: g++ -D_THREAD_SAFE -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -fno-builtin-calloc -fno-builtin-cfree -fno-builtin-memalign -fno-builtin-posix_memalign -fno-builtin-valloc -fno-builtin-pvalloc -Wno-unused-result -fno-builtin -g -O2 -D_THREAD_SAFE -o .libs/tcmalloc_minimal_unittest src/tests/tcmalloc_minimal_unittest-tcmalloc_unittest.o src/tests/tcmalloc_minimal_unittest-testutil.o -Wl,-bind_at_load  ./.libs/libtcmalloc_minimal.dylib ./.libs/liblogging.a
Undefined symbols for architecture x86_64:
  "_memalign", referenced from:
      testing::RunAllTests(int, char**) in tcmalloc_minimal_unittest-tcmalloc_unittest.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我安装了 gcc 但没有帮助。

谁能帮我解决这个问题?

4

2 回答 2

0

问题是配置出了点问题。Mac OS X 不支持memalign,这就是构建失败的原因(请参阅OSX 缺少 memalign)。

这里有两个简单的选项几乎可以肯定有效:

  1. 下载发行版 tarball,而不是从源代码构建。这样,您应该避免autoconf与朋友不做您希望他们做的任何问题。
  2. 使用Homebrew安装它。Homebrew 是一个 Mac 包管理器,它应该是你大多数 Unix 软件需求的首选:它只是工作,不像从源代码构建包。如果你用过apt-get或类似的东西,会感觉很熟悉。有很多东西的“公式”(包),包括tcmalloc;安装 MacBrew,然后执行以下操作:

    sudo brew install google-perftools

我正在使用一个稍新版本的优胜美地,我刚刚验证了它的工作原理。

于 2015-09-25T21:22:22.067 回答
0

我不是 OSX 专家。我确实可以访问旧的 OSX 版本,我不时在其中进行测试。但作为这段代码的维护者之一,我确实知道一些 gperftools。因此,让我尝试为您提供一些想法。

  1. 请确保无需您的更改即可编译所有内容。即让我们排除您的更改作为您问题的潜在来源。

  2. 查看源版本 (.tar.gz) 是否编译。即它已经包括配置哪些捆绑包 autoconf & automake & libtool 已知可以工作。因此,只需将 .tar.gz 版本下载到单独的位置,解压缩,./configure && make(因此无需 ./autogen.sh 步骤)并查看它是否有效。

您遇到的问题可能是 OSX 较新版本特有的问题(我认为优胜美地是最新的,但不确定,因为苹果的东西不是我的一杯茶)。避免这种可能性的一种方法是在 GNU/Linux 虚拟机下测试您的更改(同时继续调查为什么事情在 OSX 上不起作用)。

于 2015-09-24T18:39:11.650 回答