Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 10:57     Скомпилировать проект #1
Не знал в какую ветку кинуть.
Требуется помощь!
В общем имеется штук 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_ */
Надеюсь кто-нибудь взглянет...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2012, 10:57     Скомпилировать проект
Посмотрите здесь:

Помогите скомпилировать проект C++
Скомпилировать проект на Theards C++
C++ Скомпилировать
C++ Не получается скомпилировать проект в RAD Studio
Не могу скомпилировать C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 11:01  [ТС]     Скомпилировать проект #2
Архив исходников
Вложения
Тип файла: rar console.rar (26.2 Кб, 15 просмотров)
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
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
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'
то есть на инклудах компиляция вроде как проходит успешно, если вышеописанной командой я вообще провожу компиляцию
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 11:53     Скомпилировать проект #5
Поставь openmpi (вместе с dev-пакетом, если в твоём дистре он отдельно идет).
Цитата Сообщение от Shepard90 Посмотреть сообщение
-lmpi -lmpi_cxx - что это?
Подключаемые библиотеки же
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 - смысл не понимаю
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 12:04     Скомпилировать проект #7
Цитата Сообщение от NoMasters Посмотреть сообщение
вместе с dev-пакетом, если в твоём дистре он отдельно идет
тоже стоит?

Цитата Сообщение от Shepard90 Посмотреть сообщение
и я думал достаточно
g++ *.cpp -L/usr/lib/openmpi/include
без -lmpi -lmpi_cxx - смысл не понимаю
-L только указывает, где искать либы, что конкретно подключать передается с -l
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 и инклуда в компилируемом файле должен полностью указывать на хедер
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 12:24     Скомпилировать проект #9
Bash
1
whereis mpi
И дописать в параметре -I путь по туда

Добавлено через 1 минуту
Цитата Сообщение от Shepard90 Посмотреть сообщение
По поводу компиляции с библиотеками я что-то читал и там не говорится про конкретное подключение. Просто путь складываемый из значения опции -L и инклуда в компилируемом файле должен полностью указывать на хедер
Чувствуешь разницу между поиском хидеров и линковкой? Опции -L и -l отвечают за последнюю.
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 ошибка та же
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 12:46     Скомпилировать проект #11
Не-не-не, тут большая i, include же. И это не либы, для них как раз опции с l(L)
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 описана
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 13:00     Скомпилировать проект #13
-L/usr/lib/openmpi -lmpi -lmpi_cxx
же. Или, соответствуя путям инклюдов, -L/usr/lib/mpi
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 13:14  [ТС]     Скомпилировать проект #14
Ни чего не понял
g++ *.cpp -I/usr/include/mpi работает же (I есть И) - не выводится же mpi.h не найден

Добавлено через 3 минуты
В других же случаях эта ошибка есть
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
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), последние два указывают, какие библиотеки нужно прилинковать.
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 13:20  [ТС]     Скомпилировать проект #16
и хедеры ведь подключаются из /usr/include
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 13:22     Скомпилировать проект #17
хидер != библиотеке
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 13:29  [ТС]     Скомпилировать проект #18
... вашу мать!!! В каталоге появился бинарник!!! Спасибо!!!

Добавлено через 1 минуту
то есть в хедерах объявлены методы? А в библиотеках они описаны уже? Так получается?
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
15.07.2012, 13:31     Скомпилировать проект #19
Цитата Сообщение от Shepard90 Посмотреть сообщение
то есть в хедерах объявлены методы? А в библиотеках они описаны уже? Так получается?
В общем и целом так. В хидере описывается та информация, которая нужна для работы с собранной в объектник реализацией.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2012, 13:39     Скомпилировать проект
Еще ссылки по теме:

C++ Как рекурсивно скомпилировать проект через командную строку?
Необходимо скомпилировать проект C++
C++ Как скопировать проект в другой проект для дальнейшей работы над новой версией (VS)?

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

Или воспользуйтесь поиском по форуму:
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140
15.07.2012, 13:39  [ТС]     Скомпилировать проект #20
бинарник есть, но при его запуске
Bash
1
 ./a.out
вылетает это
[shrpard90-EP45C-DS3R:05440] [[INVALID],INVALID] ORTE_ERROR_LOG: A system-required executable either could not be found or was not executable by this user in file ../../../../../../orte/mca/ess/singleton/ess_singleton_module.c at line 357
[shrpard90-EP45C-DS3R:05440] [[INVALID],INVALID] ORTE_ERROR_LOG: A system-required executable either could not be found or was not executable by this user in file ../../../../../../orte/mca/ess/singleton/ess_singleton_module.c at line 230
[shrpard90-EP45C-DS3R:05440] [[INVALID],INVALID] ORTE_ERROR_LOG: A system-required executable either could not be found or was not executable by this user in file ../../../orte/runtime/orte_init.c at line 132
--------------------------------------------------------------------------
It looks like orte_init failed for some reason; your parallel process is
likely to abort. There are many reasons that a parallel process can
fail during orte_init; some of which are due to configuration or
environment problems. This failure appears to be an internal failure;
here's some additional information (which may only be relevant to an
Open MPI developer):

orte_ess_set_name failed
--> Returned value A system-required executable either could not be found or was not executable by this user (-127) instead of ORTE_SUCCESS
--------------------------------------------------------------------------
--------------------------------------------------------------------------
It looks like MPI_INIT failed for some reason; your parallel process is
likely to abort. There are many reasons that a parallel process can
fail during MPI_INIT; some of which are due to configuration or environment
problems. This failure appears to be an internal failure; here's some
additional information (which may only be relevant to an Open MPI
developer):

ompi_mpi_init: orte_init failed
--> Returned "A system-required executable either could not be found or was not executable by this user" (-127) instead of "Success" (0)
--------------------------------------------------------------------------
*** The MPI_Init() function was called before MPI_INIT was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.
[shrpard90-EP45C-DS3R:5440] Abort before MPI_INIT completed successfully; not able to guarantee that all other processes were killed!
Yandex
Объявления
15.07.2012, 13:39     Скомпилировать проект
Ответ Создать тему
Опции темы

Текущее время: 08:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru