我正在尝试使用distcc通过networking使用多台计算机来编译C / C ++程序。 我现在只用了两台电脑,但是我打算在这两台电脑上使用更多的电脑。
我使用的是Gentoo,我在这两台机器上安装了distcc命令:
[user @ pc〜] $ emerge distcc
我使用的机器的IP /名称是:10.0.0.47(qc7)和10.0.0.46(qc6)。 那些电脑是相同的,我安装了完全相同的软件包在他们所有的,我configurationdistcc相同的方式。
我用distcc-config设置了机器名称:
[user @ pc〜] $ distcc-config –set-hosts“qc6 qc7”
我更改了文件/etc/conf.d/distcc以允许两台机器:
…
DISTCCD_OPTS =“$ {DISTCCD_OPTS} –allow 10.0.0.46 –allow 10.0.0.47”
…
之后,我刚开始服务:
[user @ pc〜] $ /etc/init.d/distccd start
我试图编译一个简单的C ++程序,一个类( .h和.cc )和一个带有main函数的文件。 代码如下:
#include <string> using namespace std; class Person { private: string name_; int age_; public: Person(string, int); string name() const { return name_; } int age() const { return age_; } void set_name(string name) { name_ = name; } void set_age(int age) { age_ = age; } };
#include "person.h" Person::Person(string name, int age) : name_(name), age_(age) {}
#include <iostream> #include "person.h" using namespace std; int main() { Person cd1("Cristian",22); cout << "hi, my name is " << cd1.name() << " and I'm " << cd1.age() << " years old." << endl; return 0; }
CC =克++
CFLAGS = -Wall人:main.o person.o
$(CC)$(CFLAGS)-o person main.o person.operson.o:person.cc person.h
$(CC)$(CFLAGS)-c person.ccmain.o:main.cc person.h
$(CC)$(CFLAGS)-c main.cc
如果我只运行:
[user @ pc〜] $ make
没有使用distcc ,代码编译罚款。 但如果我运行:
[user @ pc〜] $ make CC = distcc
链接阶段给我一个错误。 这里是输出:
distcc -Wall -c main.cc
distcc -Wall -c person.cc
distcc -Wall -o person main.o person.o
main.o:在'keyed to main'的全局构造函数中:
main.cc:(.text+0xa):对`std :: ios_base :: Init :: Init()'的未定义引用
main.cc:(.text+0x19):对`std :: ios_base :: Init ::〜Init()'的未定义引用
main.o:在main函数中:
main.cc:(.text+0x5a):对`std :: basic_string,std :: allocator> :: basic_string(char const *,std :: allocator const&)的未定义引用
main.cc:(.text+0x80):对`std :: basic_string,std :: allocator> :: _ Rep :: _ S_empty_rep_storage'的未定义引用
main.cc:(.text+0xa4):对`std :: basic_string,std :: allocator> :: basic_string(std :: basic_string,std :: allocator> const&)的未定义引用
main.cc:(.text+0xb3):对`std :: cout'的未定义引用
main.cc:(.text+0xb8):对`std :: basic_ostream>&std :: __ ostream_insert>(std :: basic_ostream>&,char const *,long)的未定义引用'
main.cc:(.text+0xc5):对`std :: cout'的未定义引用
main.cc:(.text+0xce):对`std :: basic_ostream>&std :: __ ostream_insert>(std :: basic_ostream>&,char const *,long)的未定义引用'
main.cc:(.text+0xe3):对`std :: basic_ostream>&std :: __ ostream_insert>(std :: basic_ostream>&,char const *,long)的未定义引用'
main.cc:(.text+0xed):对std :: basic_ostream> :: operator <<(int)的未定义引用
main.cc:(.text+0x102):对`std :: basic_ostream>&std :: __ ostream_insert>(std :: basic_ostream>&,char const *,long)的未定义引用'
main.cc:(.text+0x182):对`std :: basic_ostream>的未定义引用:put(char)'
main.cc:(.text+0x18a):对`std :: basic_ostream>的未定义引用:: flush()'
main.cc:(.text+0x1d9):对`std :: __ throw_bad_cast()'的未定义引用
main.cc:(.text+0x208):未定义的参考`std :: basic_string,std :: allocator> :: _ Rep :: _ M_destroy(std :: allocator const&)'
main.cc:(.text+0x243):对std :: basic_string,std :: allocator> :: _ Rep :: _ M_destroy(std :: allocator const&)的未定义引用
main.cc:(.text+0x277):对`std :: basic_string,std :: allocator> :: _ Rep :: _ M_destroy(std :: allocator const&)的未定义引用
main.cc:(.text+0x292):对`std :: basic_string,std :: allocator> ::〜basic_string()'的未定义引用
main.cc:(.text+0x2af):对`std :: basic_string,std :: allocator> ::〜basic_string()'的未定义引用
main.cc:(.text+0x2bc):对`std :: basic_string,std :: allocator> ::〜basic_string()'的未定义引用
main.o 🙁 .eh_frame + 0x13):对__gxx_personality_v0的未定义引用
person.o:在函数`Person :: Person(std :: basic_string,std :: allocator>,int)'中:
person.cc:(.text+0x15):对std :: basic_string,std :: allocator> :: basic_string(std :: basic_string,std :: allocator> const&)的未定义引用
person.o:在函数`Person :: Person(std :: basic_string,std :: allocator>,int)'中:
person.cc:(.text+0x45):对std :: basic_string,std :: allocator> :: basic_string(std :: basic_string,std :: allocator> const&)的未定义引用
person.o 🙁 .eh_frame + 0x12):未定义引用“__gxx_personality_v0”
collect2:ld返回1退出状态
distcc [26001]错误:在本地主机上编译(null)失败
make:*** [person]错误1
[ 粗体中的行是唯一一个与distcc相关的行,所有其他行都是编译器的输出。 ]
就好像distcc找不到基本的库。 我应该怎么做distcc编译这个程序使用networking上的几台计算机? 这是我错过的一些configuration吗?
尝试不使用distcc链接阶段。 那就是使用
LD =克++
person: main.o person.o $(LD) $(LDFLAGS) -o person main.o person.o
在你的Makefile中。
也许这是一个愚蠢的问题,但是…你确定你把所需的头文件和库在两台机器上?