Clang

Программные средства разработки

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 16461
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

Непрочитанное сообщение Olej » 04 фев 2018, 19:04

Olej писал(а): Вот теперь всё ОК:

Код: Выделить всё

olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ clang++ -xc++ -stdlib=libc++ hello.cc -o hellocc
olej@olej-VirtualBox ~/2018_WORK/own.BOOKs/ManyLang/swift $ ./hellocc
Hello Clang!
Вот на этом заканчивается кино с Clang в современных DEB-дистрибутивах, с точностью до имён пакетов .deb, которые нужно установить.

Аватара пользователя
Olej
Писатель
Сообщения: 16461
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

Непрочитанное сообщение Olej » 04 фев 2018, 19:11

Olej писал(а):Вот на этом заканчивается кино с Clang в современных DEB-дистрибутивах, с точностью до имён пакетов .deb, которые нужно установить.
Но у нас ещё остаются RPM-дистрибутивы:

Код: Выделить всё

[olej@dell SNMP]$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	Fedora
Description:	Fedora release 25 (Twenty Five)
Release:	25
Codename:	TwentyFive
Здесь пакеты будут называться по-другому, и нам нужно найти их имена:

Код: Выделить всё

[olej@dell swift]$ dnf provides '*/libc++*'
Последняя проверка окончания срока действия метаданных: 12 days, 17:34:33 назад, Sat Jan 20 23:36:15 2018.
chromium-native_client-1:59.0.3071.86-4.20170607gitaac1de2.fc25.x86_64 : Google Native Client Toolchain
Источник: updates

libcxx-3.9.1-1.fc25.i686 : C++ standard library targeting C++11
Источник: updates

libcxx-3.9.1-1.fc25.x86_64 : C++ standard library targeting C++11
Источник: updates

libcxx-devel-3.9.1-1.fc25.i686 : Headers and libraries for libcxx devel
Источник: updates

libcxx-devel-3.9.1-1.fc25.x86_64 : Headers and libraries for libcxx devel
Источник: updates

libcxxabi-3.9.1-1.fc25.i686 : Low level support for a standard C++ library
Источник: updates

libcxxabi-3.9.1-1.fc25.x86_64 : Low level support for a standard C++ library
Источник: updates

libcxxabi-devel-3.9.1-1.fc25.i686 : Headers and libraries for libcxxabi devel
Источник: updates

libcxxabi-devel-3.9.1-1.fc25.x86_64 : Headers and libraries for libcxxabi devel
Источник: updates

libcxxabi-static-3.9.1-1.fc25.i686 : Static libraries for libcxxabi
Источник: updates

libcxxabi-static-3.9.1-1.fc25.x86_64 : Static libraries for libcxxabi
Источник: updates

chromium-native_client-1:52.0.2743.82-1.20160725git7d72623.fc25.x86_64 : Google Native Client Toolchain
Источник: fedora

libcxx-3.8.1-1.fc25.i686 : C++ standard library targeting C++11
Источник: fedora

libcxx-3.8.1-1.fc25.x86_64 : C++ standard library targeting C++11
Источник: fedora

libcxx-devel-3.8.1-1.fc25.i686 : Headers and libraries for libcxx devel
Источник: fedora

libcxx-devel-3.8.1-1.fc25.x86_64 : Headers and libraries for libcxx devel
Источник: fedora

Код: Выделить всё

[olej@dell swift]$ sudo dnf install libcxx
[sudo] пароль для olej: 
Последняя проверка окончания срока действия метаданных: 1:27:28 назад, Fri Feb  2 15:46:36 2018.
Зависимости разрешены.
=========================================================================================================================
 Package                      Архитектура               Версия                          Репозиторий                Размер
=========================================================================================================================
Установка:
 libcxx                       x86_64                    3.9.1-1.fc25                    updates                    198 k
 libcxxabi                    x86_64                    3.9.1-1.fc25                    updates                     80 k

Результат операции
=========================================================================================================================
Установка  2 Пакеты

Объем загрузки: 278 k
Объем изменений: 1.0 M
Продолжить? [д/Н]: y
Загрузка пакетов:
(1/2): libcxxabi-3.9.1-1.fc25.x86_64.rpm                                                 254 kB/s |  80 kB     00:00    
(2/2): libcxx-3.9.1-1.fc25.x86_64.rpm                                                    617 kB/s | 198 kB     00:00    
-------------------------------------------------------------------------------------------------------------------------
Общий размер                                                                             233 kB/s | 278 kB     00:01     
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
  Установка    : libcxxabi-3.9.1-1.fc25.x86_64                                                                       1/2 
  Установка    : libcxx-3.9.1-1.fc25.x86_64                                                                          2/2 
  Проверка     : libcxx-3.9.1-1.fc25.x86_64                                                                          1/2 
  Проверка     : libcxxabi-3.9.1-1.fc25.x86_64                                                                       2/2 

Установлено:
  libcxx.x86_64 3.9.1-1.fc25                                libcxxabi.x86_64 3.9.1-1.fc25                               

Выполнено!
Но и этого оказывается мало:

Код: Выделить всё

[olej@dell swift]$ clang++ -xc++ -stdlib=libstdc++ hello.cc -o hellocc

[olej@dell swift]$ clang++ -xc++ -stdlib=libc++ hello.cc -o hellocc
hello.cc:3:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.
Доустанавливаем:

Код: Выделить всё

[olej@dell swift]$ sudo dnf install libcxx-devel
[sudo] пароль для olej: 
Последняя проверка окончания срока действия метаданных: 1:36:58 назад, Fri Feb  2 15:46:36 2018.
Зависимости разрешены.
=========================================================================================================================
 Package                          Архитектура             Версия                          Репозиторий              Размер
=========================================================================================================================
Установка:
 libcxx-devel                     x86_64                  3.9.1-1.fc25                    updates                  418 k
 libcxxabi-devel                  x86_64                  3.9.1-1.fc25                    updates                  9.0 k

Результат операции
=========================================================================================================================
Установка  2 Пакеты

Объем загрузки: 427 k
Объем изменений: 3.8 M
Продолжить? [д/Н]: y
Загрузка пакетов:
(1/2): libcxxabi-devel-3.9.1-1.fc25.x86_64.rpm                                            68 kB/s | 9.0 kB     00:00    
(2/2): libcxx-devel-3.9.1-1.fc25.x86_64.rpm                                              1.4 MB/s | 418 kB     00:00    
-------------------------------------------------------------------------------------------------------------------------
Общий размер                                                                             374 kB/s | 427 kB     00:01     
Проверка транзакции
Проверка транзакции успешно завершена.
Идет проверка транзакции
Тест транзакции проведен успешно
Выполнение транзакции
  Установка    : libcxxabi-devel-3.9.1-1.fc25.x86_64                                                                 1/2 
  Установка    : libcxx-devel-3.9.1-1.fc25.x86_64                                                                    2/2 
  Проверка     : libcxx-devel-3.9.1-1.fc25.x86_64                                                                    1/2 
  Проверка     : libcxxabi-devel-3.9.1-1.fc25.x86_64                                                                 2/2 

Установлено:
  libcxx-devel.x86_64 3.9.1-1.fc25                          libcxxabi-devel.x86_64 3.9.1-1.fc25                         

Выполнено!
Вот теперь всё нормально:

Код: Выделить всё

[olej@dell swift]$ clang++ -xc++ -stdlib=libc++ hello.cc -o hellocc

[olej@dell swift]$ ./hellocc 
Hello Clang!

Аватара пользователя
Olej
Писатель
Сообщения: 16461
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

Непрочитанное сообщение Olej » 21 апр 2022, 15:41

Olej писал(а):
04 фев 2018, 19:04
Вот на этом заканчивается кино с Clang в современных DEB-дистрибутивах, с точностью до имён пакетов .deb, которые нужно установить.
Прошло 4 года, и опять возникли трудности с использованием Clang...
При компиляции простейшей программы чисел Фибоначчи:

Код: Выделить всё

#include <iostream>
#include <cstdlib>
using namespace std;

unsigned long fib( int n ) {
   return n < 2 ? 1 : fib(n - 1) + fib(n - 2);
}

int main(int argc, char **argv) {
   unsigned long num = atoi(argv[1]);
   cout << fib(num) << endl;
   return 0;
}

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ clang++ fibo_cc.cc -o fibo_cl
fibo_cc.cc:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.
О-ба-на! :-o
Тем более, что этот код C++ и эта строка компиляции - это работающие элементы с 2014 года в разборках с языком Go (Go конспект ... и там всё работало).

Аватара пользователя
Olej
Писатель
Сообщения: 16461
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

Непрочитанное сообщение Olej » 21 апр 2022, 15:47

Olej писал(а):
21 апр 2022, 15:41
трудности с использованием Clang...
Об этом много пишут (в основном краткие дебаты в англоязычном Интернет, и много...) - проблемы в несоответствии версий GCC & Clang.

Код: Выделить всё

olej@R420:~$ which clang++
/usr/bin/clang++

olej@R420:~$ clang++ --version
clang version 10.0.0-4ubuntu1 
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

Код: Выделить всё

olej@R420:~$ g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ ls /usr/include/c++/
9
Не нравятся тебе include? :lol:

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ clang++ -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9  fibo_cc.cc -o fibo_cl
/usr/bin/ld: невозможно найти -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Отлично!
Но теперь ему не хватает расшаренных библиотек:

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ clang++ -I/usr/include/c++/9 -I/usr/include/x86_64-linux-gnu/c++/9 -L /usr/lib/gcc/x86_64-linux-gnu/9 fibo_cc.cc -o fibo_cl

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ ls -l fibo_cl
-rwxrwxr-x 1 olej olej 17160 апр 21 15:06 fibo_cl

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ ./fibo_cl 43
701408733
Всё, успокоился. :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 16461
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

Непрочитанное сообщение Olej » 21 апр 2022, 15:49

Olej писал(а):
21 апр 2022, 15:47
Всё, успокоился.
Но меня это не совсем устраивает...
Прописать в Makefile жёстко в Clang версии 10 ссылки на GCC версии 9 ... - а через 2 месяца всё поплывёт?

Аватара пользователя
Olej
Писатель
Сообщения: 16461
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

Непрочитанное сообщение Olej » 21 апр 2022, 16:20

Olej писал(а):
21 апр 2022, 15:49
Прописать в Makefile жёстко в Clang версии 10 ссылки на GCC версии 9 ... - а через 2 месяца всё поплывёт?
Решил обновить g++...
Установлено:

Код: Выделить всё

olej@R420:~$ apt search "g\+\+-9" | grep ^i
i   g++-9                                                             - Компилятор GNU C++
i   g++-9-multilib                                                    - GNU C++ compiler (multilib support)
Имеется:

Код: Выделить всё

olej@R420:~$ apt search "g\+\+-10" 
p   g++-10                                                            - GNU C++ compiler                                                           
p   g++-10:i386                                                       - GNU C++ compiler                                                           
p   g++-10-aarch64-linux-gnu                                          - GNU C++ compiler (cross compiler for arm64 architecture)                   
p   g++-10-aarch64-linux-gnu:i386                                     - GNU C++ compiler (cross compiler for arm64 architecture)                   
p   g++-10-alpha-linux-gnu                                            - GNU C++ compiler (cross compiler for alpha architecture)                   
p   g++-10-alpha-linux-gnu:i386                                       - GNU C++ compiler (cross compiler for alpha architecture)                   
p   g++-10-arm-linux-gnueabi                                          - GNU C++ compiler (cross compiler for armel architecture)                   
p   g++-10-arm-linux-gnueabi:i386                                     - GNU C++ compiler (cross compiler for armel architecture)                   
p   g++-10-arm-linux-gnueabihf                                        - GNU C++ compiler (cross compiler for armhf architecture)                   
p   g++-10-arm-linux-gnueabihf:i386                                   - GNU C++ compiler (cross compiler for armhf architecture)                   
p   g++-10-hppa-linux-gnu                                             - GNU C++ compiler (cross compiler for hppa architecture)                    
p   g++-10-hppa-linux-gnu:i386                                        - GNU C++ compiler (cross compiler for hppa architecture)                    
p   g++-10-i686-linux-gnu                                             - GNU C++ compiler (cross compiler for i386 architecture)                    
p   g++-10-m68k-linux-gnu                                             - GNU C++ compiler (cross compiler for m68k architecture)                    
p   g++-10-m68k-linux-gnu:i386                                        - GNU C++ compiler (cross compiler for m68k architecture)                    
p   g++-10-mips-linux-gnu                                             - GNU C++ compiler (cross compiler for mips architecture)                    
p   g++-10-mips64-linux-gnuabi64                                      - GNU C++ compiler (cross compiler for mips64 architecture)                  
p   g++-10-mips64el-linux-gnuabi64                                    - GNU C++ compiler (cross compiler for mips64el architecture)                
p   g++-10-mipsel-linux-gnu                                           - GNU C++ compiler (cross compiler for mipsel architecture)                  
p   g++-10-mipsisa32r6-linux-gnu                                      - GNU C++ compiler (cross compiler for mipsr6 architecture)                  
p   g++-10-mipsisa32r6el-linux-gnu                                    - GNU C++ compiler (cross compiler for mipsr6el architecture)                
p   g++-10-mipsisa64r6-linux-gnuabi64                                 - GNU C++ compiler (cross compiler for mips64r6 architecture)                
p   g++-10-mipsisa64r6el-linux-gnuabi64                               - GNU C++ compiler (cross compiler for mips64r6el architecture)              
p   g++-10-multilib                                                   - GNU C++ compiler (multilib support)                                        
p   g++-10-multilib:i386                                              - GNU C++ compiler (multilib support)                                        
p   g++-10-multilib-arm-linux-gnueabi                                 - GNU C++ compiler (multilib support) (cross compiler for armel architecture)
p   g++-10-multilib-arm-linux-gnueabi:i386                            - GNU C++ compiler (multilib support) (cross compiler for armel architecture)
p   g++-10-multilib-arm-linux-gnueabihf                               - GNU C++ compiler (multilib support) (cross compiler for armhf architecture)
p   g++-10-multilib-arm-linux-gnueabihf:i386                          - GNU C++ compiler (multilib support) (cross compiler for armhf architecture)
p   g++-10-multilib-i686-linux-gnu                                    - GNU C++ compiler (multilib support) (cross compiler for i386 architecture) 
p   g++-10-multilib-mips-linux-gnu                                    - GNU C++ compiler (multilib support) (cross compiler for mips architecture) 
p   g++-10-multilib-mips64-linux-gnuabi64                             - GNU C++ compiler (multilib support) (cross compiler for mips64 architecture
p   g++-10-multilib-mips64el-linux-gnuabi64                           - GNU C++ compiler (multilib support) (cross compiler for mips64el architectu
p   g++-10-multilib-mipsel-linux-gnu                                  - GNU C++ compiler (multilib support) (cross compiler for mipsel architecture
p   g++-10-multilib-mipsisa32r6-linux-gnu                             - GNU C++ compiler (multilib support) (cross compiler for mipsr6 architecture
p   g++-10-multilib-mipsisa32r6el-linux-gnu                           - GNU C++ compiler (multilib support) (cross compiler for mipsr6el architectu
p   g++-10-multilib-mipsisa64r6-linux-gnuabi64                        - GNU C++ compiler (multilib support) (cross compiler for mips64r6 architectu
p   g++-10-multilib-mipsisa64r6el-linux-gnuabi64                      - GNU C++ compiler (multilib support) (cross compiler for mips64r6el architec
p   g++-10-multilib-powerpc-linux-gnu                                 - GNU C++ compiler (multilib support) (cross compiler for powerpc architectur
p   g++-10-multilib-powerpc-linux-gnu:i386                            - GNU C++ compiler (multilib support) (cross compiler for powerpc architectur
p   g++-10-multilib-powerpc64-linux-gnu                               - GNU C++ compiler (multilib support) (cross compiler for ppc64 architecture)
p   g++-10-multilib-powerpc64-linux-gnu:i386                          - GNU C++ compiler (multilib support) (cross compiler for ppc64 architecture)
p   g++-10-multilib-s390x-linux-gnu                                   - GNU C++ compiler (multilib support) (cross compiler for s390x architecture)
p   g++-10-multilib-s390x-linux-gnu:i386                              - GNU C++ compiler (multilib support) (cross compiler for s390x architecture)
p   g++-10-multilib-sparc64-linux-gnu                                 - GNU C++ compiler (multilib support) (cross compiler for sparc64 architectur
p   g++-10-multilib-sparc64-linux-gnu:i386                            - GNU C++ compiler (multilib support) (cross compiler for sparc64 architectur
p   g++-10-multilib-x86-64-linux-gnu:i386                             - GNU C++ compiler (multilib support) (cross compiler for amd64 architecture)
p   g++-10-multilib-x86-64-linux-gnux32                               - GNU C++ compiler (multilib support) (cross compiler for x32 architecture)  
p   g++-10-multilib-x86-64-linux-gnux32:i386                          - GNU C++ compiler (multilib support) (cross compiler for x32 architecture)  
p   g++-10-powerpc-linux-gnu                                          - GNU C++ compiler (cross compiler for powerpc architecture)                 
p   g++-10-powerpc-linux-gnu:i386                                     - GNU C++ compiler (cross compiler for powerpc architecture)                 
p   g++-10-powerpc64-linux-gnu                                        - GNU C++ compiler (cross compiler for ppc64 architecture)                   
p   g++-10-powerpc64-linux-gnu:i386                                   - GNU C++ compiler (cross compiler for ppc64 architecture)                   
p   g++-10-powerpc64le-linux-gnu                                      - GNU C++ compiler (cross compiler for ppc64el architecture)                 
p   g++-10-powerpc64le-linux-gnu:i386                                 - GNU C++ compiler (cross compiler for ppc64el architecture)                 
p   g++-10-riscv64-linux-gnu                                          - GNU C++ compiler (cross compiler for riscv64 architecture)                 
p   g++-10-riscv64-linux-gnu:i386                                     - GNU C++ compiler (cross compiler for riscv64 architecture)                 
p   g++-10-s390x-linux-gnu                                            - GNU C++ compiler (cross compiler for s390x architecture)                   
p   g++-10-s390x-linux-gnu:i386                                       - GNU C++ compiler (cross compiler for s390x architecture)                   
p   g++-10-sh4-linux-gnu                                              - GNU C++ compiler (cross compiler for sh4 architecture)                     
p   g++-10-sh4-linux-gnu:i386                                         - GNU C++ compiler (cross compiler for sh4 architecture)                     
p   g++-10-sparc64-linux-gnu                                          - GNU C++ compiler (cross compiler for sparc64 architecture)                 
p   g++-10-sparc64-linux-gnu:i386                                     - GNU C++ compiler (cross compiler for sparc64 architecture)                 
p   g++-10-x86-64-linux-gnu:i386                                      - GNU C++ compiler (cross compiler for amd64 architecture)                   
p   g++-10-x86-64-linux-gnux32                                        - GNU C++ compiler (cross compiler for x32 architecture)                     
p   g++-10-x86-64-linux-gnux32:i386                                   - GNU C++ compiler (cross compiler for x32 architecture)                     

Код: Выделить всё

olej@R420:~$ sudo apt install g++-10
[sudo] пароль для olej:       
Чтение списков пакетов… Готово
Построение дерева зависимостей       
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  libstdc++-10-dev
Предлагаемые пакеты:
  g++-10-multilib gcc-10-doc libstdc++-10-doc
Следующие НОВЫЕ пакеты будут установлены:
  g++-10 libstdc++-10-dev
Обновлено 0 пакетов, установлено 2 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 11,6 MB архивов.
После данной операции объём занятого дискового пространства возрастёт на 47,1 MB.
Хотите продолжить? [Д/н] y
Пол:1 http://ubuntu.volia.net/ubuntu-archive focal-updates/universe amd64 libstdc++-10-dev amd64 10.3.0-1ubuntu1~20.04 [1.759 kB]
Пол:2 http://ubuntu.volia.net/ubuntu-archive focal-updates/universe amd64 g++-10 amd64 10.3.0-1ubuntu1~20.04 [9.803 kB]
Получено 11,6 MB за 4с (2.753 kB/s) 
Выбор ранее не выбранного пакета libstdc++-10-dev:amd64.
(Чтение базы данных … на данный момент установлено 419269 файлов и каталогов.)
Подготовка к распаковке …/libstdc++-10-dev_10.3.0-1ubuntu1~20.04_amd64.deb …
Распаковывается libstdc++-10-dev:amd64 (10.3.0-1ubuntu1~20.04) …
Выбор ранее не выбранного пакета g++-10.
Подготовка к распаковке …/g++-10_10.3.0-1ubuntu1~20.04_amd64.deb …
Распаковывается g++-10 (10.3.0-1ubuntu1~20.04) …
Настраивается пакет libstdc++-10-dev:amd64 (10.3.0-1ubuntu1~20.04) …
Настраивается пакет g++-10 (10.3.0-1ubuntu1~20.04) …
Обрабатываются триггеры для man-db (2.9.1-1) …

Код: Выделить всё

olej@R420:~$ ls /usr/include/c++/
10  9
Для решаемой проблемы всё решилось:

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ clang++ fibo_cc.cc -o fibo_cl

Код: Выделить всё

olej@R420:~/2022/Go/compare/fibo$ ./fibo_cl 15
987
Но тем не менее:

Код: Выделить всё

olej@R420:~$ g++ --version
g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Дефаултная версия GCC - 9.4
С Clang разрешилось ... но возник вопрос как переключать установленные версии gcc/g++ ?

Ответить

Вернуться в «Инструменты программирования»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость