我做了一些更改,我正在尝试编译 google-perf(TCMalloc)在 Mac OS X Yosemite 10.10.3 上,我按照步骤返回此处 Install 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 但没有帮助。
谁能帮我解决这个问题?
最佳答案
我不是 OSX 专家。我确实可以访问较旧的 OSX 版本,我会不时在其中进行测试。但作为这段代码的维护者之一,我确实知道一点 gperftools。因此,让我尝试为您提供一些想法。
请确保在没有您的更改的情况下编译所有内容。 IE。让我们将您的更改排除在问题的潜在来源之外。
查看源版本 (.tar.gz) 是否编译。 IE。它已经包含配置,它捆绑了已知可以工作的 autoconf 和 automake 和 libtool。所以只需将 .tar.gz 版本下载到单独的位置,解压,./configure && make(因此没有 ./autogen.sh 步骤)并查看它是否有效。
您遇到的问题可能是较新版本的 OSX 特有的问题(我认为优胜美地是最新的但不确定,因为我不喜欢苹果的东西)。避免这种可能性的一种方法是在 GNU/Linux 虚拟机下测试您的更改(同时继续调查为什么事情在 OSX 上不起作用)。
关于c++ - 体系结构 x86_64 : _memalign: TCMalloc 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768189/