Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
#1

Скомпилировать проект - C++

15.07.2012, 10:57. Просмотров 2390. Ответов 20
Метки нет (Все метки)

Не знал в какую ветку кинуть.
Требуется помощь!
В общем имеется штук 10 исходников на С++ - все они представляют один проект.
Нужно все это дело откомпилировать именно в Linux.
Пока не могу понять в Linux или Windows это писалось - пробовал компилить (в линухе компиляция останавливается где-то внутри хедера Mpi.h, по-моему, точно не помню, при вызове Init, а в Visual Studio 2008 уже не могу сказать где - после нескольких попыток, где отладчик выводил много (десятки, а может и СОТНИ!!!) ошибок, сейчас просто пишет "не удается восстановить после предыдущих ошибок; остановка компиляции".
Библиотеки вроде все подключил. Может в Linux не все конечно.
От чего плясать вообще? По каким признакам определить хотя бы в какой ОС это писалось?
Выкладываю пару файлов на страницу
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <Glass.h>
#include <mpi.h>
#include <iostream>
 
int main(int argc, char* argv[]) {
 
    MPI_Init(&argc, &argv);
 
    ca::GlassFiles::Init(argc, argv);
    ca::Glass cag;
 
    cag.calculate();
 
    MPI_Finalize();
 
    return 0;
}
Glass.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
 * Glass.h
 *
 *  Created on: 02.12.2008
 *      Author: newmen
 */
 
#ifndef GLASS_H_
#define GLASS_H_
 
#include "GlassCleverCell.h"
#include "GlassFiles.h"
#include "functions.cpp"
#include <mpi.h>
#include <vector>
#include <iostream>
#include <fstream>
 
namespace ca {
 
using namespace std;
 
class Glass {
private:
    // системные переменные
    GlassGlassCleverCell** Cells; // рассчитываемые клетки
    std::vector<GlassGlassCleverCell*>** cNeighbours; // соседи
 
    // настройка мат. аппарата
    int Nx; // количество расчитываемых клеток по оси X
            // (должно быть кратно 4!) [безразм]
    int Ny; // количество расчитываемых клеток по оси Y [безразм]
    int showMinX, showMaxX; // минимальное, максимальное значение
                            // для отображаемого поля по оси X
    int showMinY, showMaxY; // минимальное, максимальное значение
                            // для отображаемого поля по оси Y
    int y_begin, y_end; // начальное и конечное число для итерации
                        // по Y - возникает необходимость, при разбиении
                        // поля на части, при параллельном вычислении
    float saveEveryTime; // сохранять в файл каждые ... раз
 
    // MPI
    int changeEveryStep; // частота обмена между процессами граничных ячеек
    int mpi_rank; // ранг - номер процесса, среди других
    int mpi_size; // количество процессов
    int mpi_width, mpi_height; // ширина и высота поля,
                            // в расчёте на общее количество процессов
    GlassGlassCleverCell *mpi_top_sendbuf, *mpi_bottom_sendbuf,
                        *mpi_left_sendbuf, *mpi_right_sendbuf,
                        *mpi_top_recvbuf, *mpi_bottom_recvbuf,
                        *mpi_left_recvbuf, *mpi_right_recvbuf,
                        *mpi_show_buf, *mpi_save_buf;
    int *mpi_fases_buf;
    MPI_Request *mpi_req;
    MPI_Status *mpi_stat;
 
    float h; // шаг по координате [м]
    float dt; // шаг по времени [сек]
    float m; // характеристический коэффициент параметра, характеризующего
            // дискретизацию пространства и времени (для концентрации) [безразм]
    float p; // характеристический коэффициент параметра, характеризующего
            // дискретизацию пространства и времени (для температуры) [безразм]
    float tNow; // текущее время [сек]
    int numsOfFases[3]; // количества частиц находящихся в каждой из фаз
 
    // настройка аппарата
    float tRepen; // время выдержки расплава [сек]
    int spacePosition; // количество возможных пространственных положений
    float kq; // коэффициент направленного роста [безразм]
    float kcompa1; // коэффициент условия перехода в комплекс [безразм]
    float kcompa2; // коэффициент условия перехода в комплекс [безразм]
    float kcompb1; // коэффициент условия перехода в комплекс [безразм]
    float kcompb2; // коэффициент условия перехода в комплекс [безразм]
 
    // всё что оносится к концентрации
    float C0[ELEM_NUMS]; // начальные концентрации [безразм]
    float D0[2][ELEM_NUMS]; // коэффициенты диффузии по каждому веществу
                            // (аморфная и кристаллическая фазы) [безразм]
    float E[2][ELEM_NUMS]; // энергии активации по каждому веществу
                        // (аморфная и кристаллическая фазы) [безразм]
    float kd; // коэффициент уменьшения диффузии (во сколько раз диффузия
            // меньше, в комплексной фазе, чем в аморфной) [безразм]
 
    // всё что относится к температуре
    float Tbegin; // начальная температура [град C]
    float Tend; // температура окончания процесса [град C]
    float Tcryst; // температура кристаллизации [град C]
    float Tglass; // температура стеклования [град C]
    float Tslab; // температура плит [град C]
    float Tk; // кинетическая температура образования кристалла [град C]
    float dT; // прирост температуры [град C]
 
    float q[ELEM_NUMS]; // кинетический коэффициент кристаллизации [безразм]
 
    float a0; // коэффициент температуропроводности в аморфной фазе [безразм]
    float ka1, ka2; // коэффициенты, отражающие изменение
                    // температуропроводности [безразм]
    float aslab; // коэффициент температуропроводности на границе [безразм]
 
public:
    Glass();
    virtual ~Glass();
 
    void calculate(); // запуск расчёта
 
private:
    void debugInfo(const std::string& mes);
 
    void varFile(); // чтение параметров из конфигурационного файла
 
    // вывод ошибки при открытии файла
    void fopenError(const char* filename, const char* message, const int& code);
 
    void init(); // начальная инициализация рассчитываемых массивов
    void changePhase(); // проверка фазового перехода, смена состояния
    void changeConcentrate(); // смена концентраций
    void changeTemperature(); // смена температур
};
 
}
#endif /* GLASS_H_ */
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * GlassGlassCleverCell.h
 *
 *  Created on: 02.01.2009
 *      Author: newmen
 */
 
#ifndef GLASSCLEVERCELL_H_
#define GLASSCLEVERCELL_H_
 
#include "GlassStructCell.h"
#include "consts.h"
#include <fstream>
#include <iostream>
#include <cmath>
 
namespace ca {
 
using namespace std;
 
class GlassGlassCleverCell {
public:
    class Error { };
 
    static float D0[3][ELEM_NUMS]; // начальные коэффициенты диффузии каждого
                                // вещества, для каждой из фаз
    static float E[3][ELEM_NUMS]; // энергии активации по каждому веществу,
                                // для каждой из фаз
    static float a0[ELEM_NUMS]; // начальные коэффициенты
                                // температуропроводности, для каждой из фаз
 
private:
    GlassStructCell Cell; // фаза, температура, концентрации...
    float q; // коэффициент направленного роста
    float a;
    float D[ELEM_NUMS];
 
    float CTemp[ELEM_NUMS]; // временные концентрации
    float TTemp; // временная температура
    bool TChange; // изменялась ли температура
 
public:
    GlassGlassCleverCell();
    virtual ~GlassGlassCleverCell();
 
    void write(ofstream& outf) const {
        outf.write((const char*)&Cell, sizeof(Cell));
    }
 
    static void setD0(const float D0[2][ELEM_NUMS], const float& Kd);
    static void setE(const float E[2][ELEM_NUMS]);
    static void setA0(const float& a0, const float& ka1, const float& ka2);
 
    Phase getPhase() const {
        return (Phase)Cell.F;
    }
 
    void setPhaseAt(const Phase& F) {
        Cell.F = (char)F;
 
        for (short i = 0; i < ELEM_NUMS; i++)
            D[i] = D0[i][F] * exp(-E[i][F] / (R * (Cell.T + T0)));
        a = a0[F];
        TChange = false;
    }
 
    void setPhase(const Phase& newF) {
        if (Cell.F == newF && !TChange) return;
        setPhaseAt(newF);
    }
 
    float getConcentrate(const short& num) const {
        return Cell.C[num];
    }
 
    void setConcentrate(const short& num, const float& val) {
        Cell.C[num] = CTemp[num] = val;
    }
 
 
    void incConcentrate(const short& num, const float& val) {
        CTemp[num] += val;
    }
 
    float getDiffusion(const short& num) const {
        return D[num];
    }
 
    void setDiffusion(const short& num, const float& val) {
        D[num] = val;
    }
 
    float getTemperature() const {
        return Cell.T;
    }
 
    void setTemperature(const float& val) {
        Cell.T = TTemp = val;
        TChange = true;
    }
 
    void incTemperature(const float& val) {
        TTemp += val;
        TChange = true;
    }
 
    float getA() const {
        return a;
    }
 
    void setA(const float& val) {
        a = val;
    }
 
    float getQ() const {
        return q;
    }
 
    void setQ(const float& val) {
        q = val;
    }
 
    void nextTimeStep() {
        for (short i = 0; i < ELEM_NUMS; i++) Cell.C[i] = CTemp[i];
        Cell.T = TTemp;
    }
};
 
}
#endif /* GLASSCLEVERCELL_H_ */
Надеюсь кто-нибудь взглянет...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2012, 10:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Скомпилировать проект (C++):

Необходимо скомпилировать проект - C++
Здравствуйте. Помогите скомпилировать проект, пытаюсь сам сделать выдает то есть ошибка и не компилируется, то нет ошибок, а все равно не...

Помогите скомпилировать проект - C++
Собственно сам проект - (ссылка) Скачал. Доустановил библиотеки STL и всеравно не компилируется... error LNK2019: ссылка на...

Скомпилировать проект на Theards - C++
Ребят, очень нужна помощь в компиляции проекта на theards на С++. Хочу разобраться в работе с нитями. Нашла удачный пример работы с...

Как скомпилировать проект из нескольких файлов? - C++
Интересует компиляция данного проекта. Извините, если что-то не так |: Пункт 5.18. Правил: Запрещено помещать задания и тексты в виде...

Не получается скомпилировать проект в RAD Studio - C++
Создают проект VCL Form, ничего не добавляя в него. Просто проект, без ошибок. И не могу скомпилировать, просто кнопка Run не активна....

Скомпилировать проект в exe Visual Studio 2013 - C++
Здравствуйте! Я написал консольную игру в VS 2013. И к ней добавил музыку, закинув в папку решения и объявив командой PlaySound(). Но как...

20
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 11:01  [ТС] #2
Архив исходников
0
Вложения
Тип файла: rar console.rar (26.2 Кб, 15 просмотров)
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 11:23 #3
Цитата Сообщение от Shepard90 Посмотреть сообщение
.rar
Цитата Сообщение от Shepard90 Посмотреть сообщение
откомпилировать именно в Linux.
?

Собирать примерно так:
Bash
1
g++ *.cpp -L/usr/lib/openmpi -lmpi -lmpi_cxx
предварительно поставив в main.cpp вокруг "Grass.h" кавычки вместо угловых скобок.
Впрочем, работать у меня отказывается мотивируя это так:
This program must be run on 2 or more MPI process
0
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 11:43  [ТС] #4
Bash
1
g++ *.cpp -L/usr/lib/openmpi -lmpi -lmpi_cxx
так не находит mpi.h
пытается компилить написав так
Bash
1
g++ -I /usr/include/mpi main.cpp
(I-заглавная И) - англиский не знаю - c маном тяжело, приходиться гуглить
в main.cpp #include <mpi.h>
Glass.h в кавычках стоит
-lmpi -lmpi_cxx - что это?
вышеописанная команда, которую я использую выводит кучу ошибок
самая первая - /tmp/ccMzYCJM.o: In function `main':
main.cpp.text+0x1b): undefined reference to `MPI_Init'
то есть на инклудах компиляция вроде как проходит успешно, если вышеописанной командой я вообще провожу компиляцию
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 11:53 #5
Поставь openmpi (вместе с dev-пакетом, если в твоём дистре он отдельно идет).
Цитата Сообщение от Shepard90 Посмотреть сообщение
-lmpi -lmpi_cxx - что это?
Подключаемые библиотеки же
0
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 12:00  [ТС] #6
openmpi стоит - проверял
выполняя
Bash
1
g++ *.cpp -L/usr/lib/openmpi/include -lmpi -lmpi_cxx
выдает Glass.h:14:17: фатальная ошибка: mpi.h: Нет такого файла или каталога
почему-то в main.cpp все норм проходит, а в Glass.h - нет
там как и в main.cpp записано #include "mpi.h"

Добавлено через 1 минуту
и я думал достаточно
Bash
1
g++ *.cpp -L/usr/lib/openmpi/include
без -lmpi -lmpi_cxx - смысл не понимаю
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 12:04 #7
Цитата Сообщение от NoMasters Посмотреть сообщение
вместе с dev-пакетом, если в твоём дистре он отдельно идет
тоже стоит?

Цитата Сообщение от Shepard90 Посмотреть сообщение
и я думал достаточно
g++ *.cpp -L/usr/lib/openmpi/include
без -lmpi -lmpi_cxx - смысл не понимаю
-L только указывает, где искать либы, что конкретно подключать передается с -l
0
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 12:21  [ТС] #8
да я ставил какой-то пакет. Но видать он стоял изначально. У меня openmpi в /usr/include и в /usr/lib валяются. В общем mpi.h есть и путь к нему прописан верно. Почему g++ его не находит я не врубаю

Добавлено через 4 минуты
Цитата Сообщение от NoMasters Посмотреть сообщение
-L только указывает, где искать либы, что конкретно подключать передается с -l
По поводу компиляции с библиотеками я что-то читал и там не говорится про конкретное подключение. Просто путь складываемый из значения опции -L и инклуда в компилируемом файле должен полностью указывать на хедер
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 12:24 #9
Bash
1
whereis mpi
И дописать в параметре -I путь по туда

Добавлено через 1 минуту
Цитата Сообщение от Shepard90 Посмотреть сообщение
По поводу компиляции с библиотеками я что-то читал и там не говорится про конкретное подключение. Просто путь складываемый из значения опции -L и инклуда в компилируемом файле должен полностью указывать на хедер
Чувствуешь разницу между поиском хидеров и линковкой? Опции -L и -l отвечают за последнюю.
0
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 12:45  [ТС] #10
whereis mpi выдал /usr/include/mpi
то есть чтобы подключить либу, как я понял, достаточно написать так
Bash
1
g++ *.cpp -l/usr/include/mpi
?
выдает то же Glass.h:14:17: фатальная ошибка: mpi.h: Нет такого файла или каталога

Добавлено через 6 минут
почему же именно для Glass.h вылезает эта ошибка? даже если компилить не *.cpp а только один main.cpp ошибка та же
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 12:46 #11
Не-не-не, тут большая i, include же. И это не либы, для них как раз опции с l(L)
1
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 12:57  [ТС] #12
а ну тогда с I(И) он выводит кучу ошибок. С инклудами значит все проходит норм и первая из ошибок
/tmp/ccMzYCJM.o: In function `main':
main.cpp.text+0x1b): undefined reference to `MPI_Init'
в mpi.h MPI_init описана
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 13:00 #13
-L/usr/lib/openmpi -lmpi -lmpi_cxx
же. Или, соответствуя путям инклюдов, -L/usr/lib/mpi
0
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 13:14  [ТС] #14
Ни чего не понял
g++ *.cpp -I/usr/include/mpi работает же (I есть И) - не выводится же mpi.h не найден

Добавлено через 3 минуты
В других же случаях эта ошибка есть
0
NoMasters
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,143
15.07.2012, 13:19 #15
Bash
1
g++ *.cpp -I/usr/include/mpi -L/usr/lib/mpi -lmpi -lmpi_cxx
Первый параметр после cpp показывает, где надо искать .h-файлы, второй — где находятся сами библиотеки(.so или .a), последние два указывают, какие библиотеки нужно прилинковать.
0
15.07.2012, 13:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 13:19
Привет! Вот еще темы с ответами:

Как рекурсивно скомпилировать проект через командную строку? - C++
Как рекурсивно скомпилировать проект через командную строку? Если у меня заголовочные файлы в папке Headers. Но мне нужен универсальный...

Как скопировать проект в другой проект для дальнейшей работы над новой версией (VS)? - C++
(Visual Studio 2013) Например я сделал один проект, пусть это будет проект версия №1, затем я захотел улучшить проект версии №1 и сделать...

Скомпилировать - C++
Доброго времени суток, скомпилируйте пожалуйста программу по коду, Visual Studio под рукой нету. #include &lt;stdio.h&gt; #include &lt;string.h&gt;...

Как скомпилировать проект чтобы вложились нужные библиотеки!!! - C++
Привет, народ может поможете. Как мне скомпилировать проект чтобы в папке с прогой, С++ вложил все нужные ей библиотеки, dll? (С++ Архитект...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru