我正在尝试使用distcc通过网络使用多台计算机编译 C/C++ 程序。我现在只使用两台计算机,但我打算在与这两台计算机一起使用时使用更多。
我正在使用 Gentoo,我distcc
在两台机器上都安装了以下命令:
[user@pc ~]$ 出现 distcc
我正在使用的机器的 IP/名称是:10.0.0.47 (qc7) 和 10.0.0.46 (qc6)。这些计算机是相同的,我在它们上都安装了完全相同的软件包,并且我distcc
以相同的方式进行了配置。
我将机器名称设置为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 启动
我尝试编译一个简单的 C++ 程序,其中包含一个类 ( .h
and .cc
) 和一个包含该main
函数的文件。代码如下:
人.h
#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; }
};
个人.cc
#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=g++
CFLAGS=-墙人: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 ~]$ 制作
不使用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:在函数“全局构造函数键控到 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::分配器 > const&)'
main.cc:(.text+0xb3): undefined reference to `std::cout'
main.cc:(.text+0xb8): undefined reference to `std::basic_ostream >& std::__ostream_insert >(std:: basic_ostream >&, char const*, long)'
main.cc:(.text+0xc5): undefined reference to `std::cout'
main.cc:(.text+0xce): undefined reference to `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): undefined reference to `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): undefined reference to `std::__throw_bad_cast()'
main.cc:(.text+0x208): undefined reference to `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): undefined reference to `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): undefined reference to `__gxx_personality_v0'
person.o: In function `Person::Person(std::basic_string, std: :allocator >, int)':
person.cc:(.text+0x15): undefined reference to `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::分配器 >::basic_string(std::basic_string, std::allocator >常量&)'
person.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
distcc[26001] ERROR: compile (null) on localhost failed
make: *** [person] Error 1
[粗体线是唯一与 相关的distcc
,其他都是编译器输出。]
好像distcc
找不到基本库。我应该怎么做才能distcc
使用网络上的多台计算机编译这个程序?是我错过了一些配置吗?
尝试不要将 distcc 用于链接阶段。也就是说,使用
LD=g++
在你的 Makefile 中。
也许这是一个愚蠢的问题,但是......你确定你在两台机器上都放置了所需的头文件和库吗?