2015-09-24 219 views
1

我已經做了一些更改,我試圖在Mac OS X Yosemite 10.10.3上編譯google-perf(TCMalloc),我按照步驟返回Install gperf。但是,我正在下面鏈接錯誤。架構x86_64未定義的符號:_memalign:TCMalloc

./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,但沒有幫助。

任何人都可以幫我解決這個問題嗎?

+0

編寫一個簡單的測試,看看您的系統上是否有memalign可用。 – Jeff

回答

0

我不是OSX專家。我確實可以訪問較舊的OSX版本,我可以隨時測試這些版本。但我確實知道一些gperftools作爲這個代碼的維護者之一。所以讓我試着幫助你一些想法。

  1. 請確保沒有您的更改編譯所有內容。即可以將您的更改排除爲潛在的問題來源。

  2. 查看源代碼版本(.tar.gz)是否編譯。即它已經包含了捆綁autoconf的配置文件& automake &已知可用的libtool。因此,只需將.tar.gz發行版下載到單獨的位置,解壓縮./configure & & make(因此沒有./autogen.sh步驟)並查看它是否有效。

這可能是問題,您遇到特定於OSX的較新版本的東西(我認爲是優山美地最新的,但不能確定,因爲蘋果的東西是不是我的那杯茶)。避免這種可能性的一種方法是在GNU/Linux虛擬機下測試您的更改(同時繼續調查爲什麼事情在OSX上不起作用)。

+0

問題仍然沒有我的更改。我嘗試了你的第二步,並得到同樣的錯誤。同樣的改變在我的linux機器上工作正常。 – eswaat

+0

鑑於我們的代碼中沒有_memalign,我懷疑OSX標準包含的東西是#define -ing(像posix_memalign是_memalign)。但缺乏訪問OSX框我無法證實這一點。 –

0

問題是配置出了問題。 Mac OS X不支持memalign,這就是構建失敗的原因(請參閱OSX lacks memalign)。

這裏有兩個簡單的選項,幾乎可以肯定應該工作:

  1. Download a release tarball而不是從源代碼構建。這樣,你應該避免與autoconf和朋友沒有做你希望他們會做的事情。
  2. 使用Homebrew進行安裝。 Homebrew是一個Mac軟件包管理器,它應該是您的大部分Unix軟件需求的開始:它只是起作用,不同於從源代碼構建軟件包。如果你已經使用apt-get或類似的東西,它會覺得很熟悉。有很多東西的「公式」(包),包括tcmalloc;安裝MacBrew,那麼這樣做:

    sudo brew install google-perftools

我使用約塞米蒂稍微較新的版本,我只是驗證了這個工程。

相關問題