Форум программистов, компьютерный форум, киберфорум
C++: IDE, инструментарий
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/51: Рейтинг темы: голосов - 51, средняя оценка - 4.78
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
1

Пытаемся подружить clang 3.6 и Code::Blocks 13.12 + MinGW под Windows 7

17.03.2015, 10:03. Показов 10707. Ответов 54

Скачал clang. Установил в корень диска С. То есть, путь получился такой:
C:\LLVM\
До этого у меня уже был установлен Code::Blocks 13.12 в связке с MinGW (GCC 4.8.1). У меня он установлен тоже в корень диска С. То есть, путь такой:
C:\CodeBlocks\
Открыл Code::Blocks, в Settings -> Compiler в выпадающем меню установил в качестве дефолтного LLVM Clang Compiler.
Попробовал скомпилить Hello World! - ругается, что не может найти хедер iostream. Ладно, думаю, пропишем тебе пути к хедерам. В Settings -> Compiler -> Search directories -> Compiler добавил три строчки:
C:\CodeBlocks\MinGW\include
C:\CodeBlocks\MinGW\lib
C:\CodeBlocks\MinGW\lib\gcc\mingw32\4.8.1\include\c++
Ещё раз пытаюсь скомпилить Hello World! Теперь ругается, так:
C:\CodeBlocks\MinGW\lib\gcc\mingw32\4.8.1\include\c++\iostre am|38|fatal error: 'bits/c++config.h' file not found|
Дописал в Settings -> Compiler -> Search directories -> Compiler четвёртую строчку:
C:\CodeBlocks\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw3 2\bits
Не помогает. Всё равно ругается fatal error: 'bits/c++config.h' file not found

Что я делаю не так?
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2015, 10:03
Ответы с готовыми решениями:

Пытаемся прикрутить Clang к QtCreator под Windows7 x64 посредством MSYS2
По мотивам этой темы: DrOffset, а как?

SFML, MinGW 5.2.0, Code::blocks
В общем решил я собрать SFML сам, потому что не хочу скачивать MinGW 4.9.2 только чтобы...

Code::Blocks 17.12 и MinGW (последний)
Всем привет! Скачал Code::Blocks (codeblocks-17.12mingw-setup.exe), написал простенькую программку...

Отвечает за стиль программы - Code Blocks или mingw?
Здравствуйте! Столкнулся с такой проблемой - при компиляции программ в Code Blocks с помощью mingw...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
54
14121 / 7582 / 1802
Регистрация: 30.01.2014
Сообщений: 12,684
17.03.2015, 10:07 2
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Цитата Сообщение от gru74ik Посмотреть сообщение
Дописал в Settings -> Compiler -> Search directories -> Compiler четвёртую строчку:
Наверное надо так:
C:\CodeBlocks\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw3 2
Но вообще лучше так не мучиться.
Есть возможность получить и компиляторы и набор библиотек к ним уже настроенными и готовыми к использованию. См. в соседней теме мой ответ.
1
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
17.03.2015, 11:02 3
Получилось? У меня без IDE нормальным способом это никогда не получалось.
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 11:04  [ТС] 4
Цитата Сообщение от castaway Посмотреть сообщение
Получилось?
Я пока дома, обедаю - времени в обрез. Примерно через пол-часа вернусь на работу, там попробую.
1
14121 / 7582 / 1802
Регистрация: 30.01.2014
Сообщений: 12,684
17.03.2015, 11:49 5
Цитата Сообщение от castaway Посмотреть сообщение
У меня без IDE нормальным способом это никогда не получалось.
Тебе тоже тогда посоветую msys2 поставить.
1
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 11:51  [ТС] 6
Исправил четвёртый путь на вариант предложенный DrOffset'ом. Теперь вот такое выдаёт:
-------------- Build: Debug in clangSecondProject (compiler: LLVM Clang Compiler)---------------

clang++.exe -LC:\CodeBlocks\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw 32\bits -o bin\Debug\clangSecondProject.exe obj\Debug\main.o
clang++.exe: error: unable to execute command: program not executable
clang++.exe: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
Process terminated with status 1 (0 minute(s), 0 second(s))
0 error(s), 0 warning(s) (0 minute(s), 0 second(s))
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
17.03.2015, 11:55 7
DrOffset, у меня стоит MSYS2, но, честно говоря, я не понимаю какое отношение она имеет к MinGW и Clang в данном случае.
Соседняя тема, это какая? Можно ссылку?
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 11:59  [ТС] 8
Соседняя тема.

Добавлено через 1 минуту
castaway, если я правильно понял, MSYS2 - это аналог MinGW.
0
Эксперт С++
4967 / 3074 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
17.03.2015, 12:00 9
gru74ik, нет, MSYS это Unix-подобная среда командной строки.
1
14121 / 7582 / 1802
Регистрация: 30.01.2014
Сообщений: 12,684
17.03.2015, 12:00 10
Цитата Сообщение от castaway Посмотреть сообщение
у меня стоит MSYS2, но, честно говоря, я не понимаю какое отношение она имеет к MinGW и Clang в данном случае.
Прямое. И тот и другой есть в составе.
1
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 12:09  [ТС] 11
Добавил в Settings -> Compiler -> Toolchain executables -> Additional Paths строчку
C:\CodeBlocks\MinGW\bin
и всё заработало
1
14121 / 7582 / 1802
Регистрация: 30.01.2014
Сообщений: 12,684
17.03.2015, 12:10 12
Цитата Сообщение от gru74ik Посмотреть сообщение
MSYS2 - это аналог MinGW.
Не аналог. Он предоставляет юникc-подобное окружение. Но в данном случае я его рекомендую не поэтому. А потому что средства из него можно легко использовать в IDE. Например оно стоит в D:\Develop\MSYS2. Теперь достаточно в настройках компилятора в IDE прописать путь D:\Develop\MSYS2\mingw32. После этого в IDE заработает не только mingw, но и все библиотеки, которые ты поставил с помощью оболочки msys. Для clang действия аналогичные, только имена компилятора и линкера другие.
4
Jesus loves me
Эксперт С++
5164 / 3137 / 353
Регистрация: 12.12.2009
Сообщений: 7,925
Записей в блоге: 2
17.03.2015, 13:09 13
Обычно пишется какой-то скрипт используемой системы построения (make, cmake, etc) где и прописывается компилятор, пути и т.д. Потом при помощи IDE этот скрипт подхватывается и при помощи него же и происходит сборка.
Самой IDE никто не строит, как-то по-ламерски это.
1
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 13:18  [ТС] 14
Цитата Сообщение от Kastaneda Посмотреть сообщение
Обычно пишется какой-то скрипт используемой системы построения (make, cmake, etc) где и прописывается компилятор, пути и т.д.
Ещё бы уметь это делать...

Добавлено через 1 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
и всё заработало
Рано радовался Новые ошибки лезут:
-------------- Build: Debug in thirdClangProject (compiler: LLVM Clang Compiler)---------------

clang++.exe -LC:\CodeBlocks\MinGW\lib\gcc\mingw32\4.8.1\include\c++\mingw 32\bits -o bin\Debug\thirdClangProject.exe obj\Debug\main.o
obj\Debug\main.o: In function `main':
D:\0_0\CPP\Projects\thirdClangProject/main.cpp:12: undefined reference to `_Unwind_Resume'
obj\Debug\main.o.eh_frame+0x63): undefined reference to `__gxx_personality_v0'
collect2.exe: error: ld returned 1 exit status
clang++.exe: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
Process terminated with status 1 (0 minute(s), 0 second(s))
2 error(s), 0 warning(s) (0 minute(s), 0 second(s))
0
Jesus loves me
Эксперт С++
5164 / 3137 / 353
Регистрация: 12.12.2009
Сообщений: 7,925
Записей в блоге: 2
17.03.2015, 13:36 15
Попробуй просто Hello World собрать сначала руками из консоли, потом из IDE.

Добавлено через 4 минуты
Цитата Сообщение от gru74ik Посмотреть сообщение
D:\0_0\CPP\Projects\thirdClangProject/main.cpp:12: undefined reference to `_Unwind_Resume'
Вот, что на SO говорят
Undefined references to _Unwind_Resume are caused by compiling with a GCC with a different stack unwinding method from that used by the library you're trying to link with.
Добавлено через 5 минут
Еще покажи полный лог билда, то, что выше уже линковка, компиляции не видно.
1
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 14:25  [ТС] 16
Судя по ошибке, ты не HelloWorld собираешь, тут сложнее понять чего именно ему не хватает.
Так и есть. Собирал Hello World, всё было нормально, я уж обрадовался. Потом решил свои упражнения с классами из Праты покомпилить clang'ом, не тут-то было.
0
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 14:37  [ТС] 17
Пытался скомпилить вот это:

main.cpp
Кликните здесь для просмотра всего текста
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
//  sp_Ch10_Pg531_Ex02
/// Занятия по книге Стивена Праты "Язык программирования С++" (2013, 6-е изд.).
/// Упражнения по программированию. Глава 10, страница 531, упражнение 2.
/*
Пусть имеется определение следующего простого класса:
class Person
{
    private:
        static const LIMIT = 25;
        string lname;         // фамилия
        char fname[LIMIT];    // имя
    public:
        Person () { lname = ""; fname[0] = '\0'; }              // #1
        Person (const string & ln, const char * fn = "Heyyou"); // #2
 
        // Следующие методы отображают lname и fname
        void Show() const;          // формат: имя фамилия
        void FormalShow() const;    // формат: фамилия, имя
};
(В нем используется объект string и символьный массив, так что вы сможете
сравнить применение этих двух форм.) Напишите программу, которая дополнит
реализацию за счет предоставления кода для пока еще не определенных
методов. В программе, использующей класс, должны также присутствовать вызовы
трех возможных конструкторов (без аргументов, с одним аргументом, с двумя
аргументами) и двух методов отображения. Ниже приведен пример применения
этих конструкторов и методов:
Person one;     // используется конструктор по умолчанию
 
Person two("Smythecraft");  // используется конструктор #2
                            // с одним аргументом по умолчанию
 
Person three("Dimwiddy", "Sam");    // используется конструктор #2,
                                    // без аргументов по умолчанию
one.Show();
cout << endl;
one.FormalShow();
// и т.д. для объектов two и three
*/
#include <iostream>
#include "Person.h"
 
int main()
{
    Person one;
    Person two("Smythecraft");
    Person three("Dimwiddy", "Sam");
 
    one.show();
    std::cout << std::endl << std::endl;
    one.formal_show();
    std::cout << std::endl << std::endl << std::endl;
 
    two.show();
    std::cout << std::endl << std::endl;
    two.formal_show();
    std::cout << std::endl << std::endl << std::endl;
 
    three.show();
    std::cout << std::endl << std::endl;
    three.formal_show();
    std::cout << std::endl;
    return 0;
}


Person.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef PERSON_H
#define PERSON_H
 
#include <string>
 
class Person
{
    private:
        static const int LIMIT = 25;
        std::string m_lastname;  // фамилия
        char m_firstname[LIMIT]; // имя
 
    public:
        Person() { m_lastname = ""; m_firstname[0] = '\0'; }              // #1
        Person(const std::string & lname, const char * fname = "Heyyou"); // #2
        ~Person() {}
        void show() const;        // формат: имя фамилия
        void formal_show() const; // формат: фамилия, имя
};
 
#endif // PERSON_H


Person.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "Person.h"
#include <iostream>
#include <string>
#include <cstring>
 
Person::Person(const std::string & lname, const char * fname)
{
    m_lastname = lname;          // фамилия
    strcpy(m_firstname, fname);  // имя
}
 
void Person::show() const
{
    std::cout << m_firstname << " " << m_lastname;
}
 
void Person::formal_show() const
{
    std::cout << m_lastname << ", " << m_firstname;
}


Выдаёт такое:
0
Миниатюры
Пытаемся подружить clang 3.6 и Code::Blocks 13.12 + MinGW под Windows 7  
Эксперт CЭксперт С++
5054 / 2241 / 330
Регистрация: 20.02.2013
Сообщений: 5,601
Записей в блоге: 24
17.03.2015, 14:47  [ТС] 18
Попробую пойти по пути, предложенному DrOffset'ом.
0
Jesus loves me
Эксперт С++
5164 / 3137 / 353
Регистрация: 12.12.2009
Сообщений: 7,925
Записей в блоге: 2
17.03.2015, 14:51 19
На скрине ошибки линкера, выложи полный билд лог.
0
33 / 33 / 18
Регистрация: 15.05.2013
Сообщений: 236
17.03.2015, 15:05 20
А чем Qt не угодил?
Скачиваешь и в путь. Никаких проблем и заморочек.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2015, 15:05

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как убрать неполадки совместимости с Code::Blocks при установке этой IDE под Windows 7 ?
Как убрать неполадки совместимости с Code::Blocks.Запускаю установочник и вылезает ошибка...

GTK / C++ проект в Code::Blocks под Windows
Библиотека GTK позволяет довольно быстро и просто делать графические приложения под разные...

Установка библиотеки GTK+ в среде Code::Blocks под Windows
Я делал всё, как написано здесь http://grafika.me/node/149 Но библеотека не распознаётся при...

Где скачать code blocks с x64-м mingw?
Где скачать code blocks с x64-м mingw? Установить его отдельно и подцепить не получается.


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

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

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