Неопределенные символы для архитектуры x86_64: _memalign: TCMalloc

Я сделал некоторые изменения, и я пытаюсь скомпилировать Google-перфорация (TCMalloc) на Mac OS X Yosemite 10.10.3 я следовал пошаговому возврату здесь Установите 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, но не помогло.

Может ли кто-нибудь помочь мне решить эту проблему?

1

Решение

Я не эксперт по OSX. У меня есть доступ к более старой версии OSX, где я время от времени проверяю. Но я немного знаю gperftools как один из разработчиков этого кода. Итак, позвольте мне попытаться помочь вам с некоторыми идеями.

  1. Пожалуйста, убедитесь, что все компилируется без ваших изменений. То есть Давайте исключим ваши изменения как потенциальный источник вашей проблемы.

  2. Посмотрите, компилируется ли исходная версия (.tar.gz). То есть он уже включает в себя настройку, какие пакеты autoconf & Automake & libtool, который, как известно, работает. Так что просто загрузите релиз .tar.gz в отдельное место, распакуйте, ./configure && сделать (так что без ./autogen.sh step) и посмотреть, работает ли он.

Вполне возможно, что проблема, с которой вы столкнулись, является чем-то специфическим для более новой версии OSX (я думаю, что yosemite — последняя версия, но я не уверен, так как яблочные продукты не моя чашка чая). Один из способов избежать этой возможности — протестировать ваши изменения в виртуальной машине GNU / Linux (продолжая исследовать, почему что-то не работает в OSX).

0

Другие решения

Проблема в том, что что-то пошло не так с конфигурацией. Mac OS X не поддерживает memalignИменно поэтому сборка не выполняется (см. OSX не хватает memalign).

Вот два простых варианта, которые почти наверняка сработают:

  1. Скачайте релизный архив а не здание из источника. Таким образом, вы должны избегать любых проблем с autoconf и друзья не делают то, что вы надеялись, что они будут делать.
  2. Установите его, используя Homebrew. Homebrew — это менеджер пакетов для Mac, который поможет вам в большинстве ваших потребностей программного обеспечения Unix: он просто работает, в отличие от сборки пакетов из исходного кода. Если вы использовали apt-get или что-то подобное, это будет казаться довольно знакомым. Есть «формулы» (пакеты) для множества вещей, в том числе tcmalloc; установите MacBrew, затем сделайте это:

    sudo brew install google-perftools

Я использую немного более новую версию Yosemite, и я только что проверил, что это работает.

0

По вопросам рекламы [email protected]