Я пытаюсь использовать distcc для компиляции программ C / C ++ с использованием более чем одного компьютера по сети. На данный момент я использую только два компьютера, но я намерен использовать больше, когда он будет работать с этими двумя.
Я использую Gentoo, установил distcc
на обеих машинах командой:
[пользователь @ pc ~] $ emerge distcc
IP-адреса / имена машин, которые я использую: 10.0.0.47 (qc7) и 10.0.0.46 (qc6). эти компьютеры идентичны, я установил на них одинаковые пакеты и настроил distcc
так же.
Я установил имена машин с distcc-config
:
[пользователь @ 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"
...
после этого я просто запустил сервис:
[пользователь @ 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 = g ++
CFLAGS = -Стенаperson: main.o person.o
$ (CC) $ (CFLAGS) -o человек main.o person.operson.o: person.cc person.h
$ (CC) $ (CFLAGS) -c person.ccmain.o: main.cc person.h
$ (CC) $ (CFLAGS) -c main.cc
если я бегу только:
[пользователь @ 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: В функции `глобальные конструкторы с ключом к 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: *** [человек] Ошибка 1
[выделенная жирным шрифтом строка - единственная, имеющая отношение к distcc
, все остальные - вывод компилятора.]
это как если бы distcc
не смог найти базовые библиотеки. что мне делать, чтобы сделать distcc
скомпилировать эту программу, используя несколько компьютеров в сети? это какая-то конфигурация, которую я пропустил?
Старайтесь не использовать distcc на этапе связывания. То есть использовать
LD = g ++
person: main.o person.o
$(LD) $(LDFLAGS) -o person main.o person.o
в вашем Makefile.
Может быть, это глупый вопрос, но ... вы уверены, что разместили необходимые заголовки и библиотеки на обеих машинах?