如何在OS X 10.10中使用Homebrew安装gcc-4.8.4

3
我从github克隆了别人的c++代码,但是无法编译。作者告诉我他使用的gcc版本是4.8.4并且他能够成功运行它。因此我使用brew install homebrew/versions/gcc48安装了gcc48,并在他的代码文件夹中的makefile中指定了gcc的版本。
然而,在编译过程中出现了错误:
g++-4.8  -c -pipe -O3 BurstyBTM.cpp -o BurstyBTM.o 
BurstyBTM.cpp: In member function 'Pvec<double> BurstyBTM::compute_pz_b(Biterm&)':
BurstyBTM.cpp:129:23: error: could not convert 'pz.Pvec<T>::normalize<double>(0.0)' from 'void' to 'Pvec<double>'
   return pz.normalize();
                       ^
BurstyBTM.cpp: In member function 'void BurstyBTM::save_pz(std::string)':
BurstyBTM.cpp:158:41: error: conversion from 'void' to non-scalar type 'Pvec<double>' requested
   Pvec<double> pz = nb_z.normalize(alpha);
                                         ^
BurstyBTM.cpp: In member function 'void BurstyBTM::save_pw_z(std::string)':
BurstyBTM.cpp:164:37: error: conversion from 'void' to non-scalar type 'Pmat<double>' requested
   Pmat<double> pw_z = nwz.normr(beta);
                                     ^
make: *** [BurstyBTM.o] Error 1

我该如何安装特定版本的gcc(4.8.4)?或者,我该如何解决这个问题?谢谢!

“BurstyBTM.”这个名称的来源是什么? - Mathieu
该文件夹中有 BurstyBTM.oBurstyBTM.hBurstyBTM.cpp - user4462740
你能否发布一下在 ld: symbol(s) not found for architecture x86_64 上面的错误行? - Mathieu
@purplepsycho,我已经编辑了问题。 - user4462740
1个回答

0
你尝试使用C编译器而不是C++编译器编译代码。
在make文件中,替换

CC=gcc-4.8

通过

CC=g++-4.8

如果您没有安装g++,请使用以下命令进行安装:
brew install gcc48 --enable-cxx

感谢您的回答。但这次遇到了错误:g++-4.8 BurstyBTM.o main.o -o bbtm Undefined symbols for architecture x86_64: "BurstyBTM::run(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from: _main in main.o ld: symbol(s) not found for architecture x86_64 collect2: error: ld returned 1 exit status make: *** [bbtm] Error 1 - user4462740
你试过在执行之前使用 make clean 命令吗? - Mathieu
是的,但我认为这可能是不必要的:make: *** 没有清除目标规则。停止。 - user4462740
你的问题可能来自于 .o 文件是用 gcc 编译而不是 g++,所以在再次运行 make 前应该删除这些.o文件。 - Mathieu
你是对的!但是另一个错误出现了,请查看更新。 - user4462740
我认为你应该开一个新问题:你有几个问题:<br> * 首先,你必须创建一个好的Makefile,<br> * 然后你尝试编译的代码有一些缺陷。<br> 我认为这两个问题是不同的。 - Mathieu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接