Clang

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 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
Писатель
Сообщения: 21338
Зарегистрирован: 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
Писатель
Сообщения: 21338
Зарегистрирован: 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
Писатель
Сообщения: 21338
Зарегистрирован: 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
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Clang

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

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

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 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++ ?

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

Clang

Непрочитанное сообщение Olej » 13 янв 2024, 01:55

Olej писал(а):
02 апр 2013, 11:02
Clang может линковаться со стандартной библиотекой из GCC (опция -stdlib=libstdc++) и с новой библиотекой C++ (опция -stdlib=libc++), которая делается в составе проекта Clang, и утверждается, что она лучше (чем GCC) уже на сейчас, а дальше будет всё лучше и лучше...
Понадобился вновь Clang в связи ... с книгой по Go и сравнением характеристик Clang и GoLang ... не важно...
Время прошло... :

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

olej@R420:/usr/include$ clang --version
Ubuntu clang version 14.0.0-1ubuntu1.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Система:

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

olej@R420:/usr/include/c++/11$ lsb_release -a
No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 21.2
Release:	21.2
Codename:	victoria

... т.е. Ubuntu-совместимая...

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

Clang

Непрочитанное сообщение Olej » 13 янв 2024, 01:59

Olej писал(а):
13 янв 2024, 01:55
Понадобился вновь Clang
На том же коде проверяюсь со сборкой:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ cat fibo_cc.cc
#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;
}
И получаю облом-с :oops: :

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ clang++ -O3 fibo_cc.cc -o fibo_cl
fibo_cc.cc:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.

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

Clang

Непрочитанное сообщение Olej » 13 янв 2024, 02:07

Olej писал(а):
13 янв 2024, 01:59
И получаю облом-с
Поковырявшись изрядно ... всё забылось ... - нахожу решение для сборки с библиотеками GCC (родными Linux), libstdc++ :

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples.work/compare/fibo$ gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 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 зп время эксплуатации этой системы (а она прожила от Mint 19.1 до Mint 21.2 исключительно обновлениями):

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

olej@R420:~$ la -l /usr/include/c++
итого 36
drwxr-xr-x 12 root root 12288 июл 31 18:34 10
drwxr-xr-x 12 root root 12288 июл 31 18:34 11
drwxr-xr-x 13 root root 12288 янв  4  2023 9

И, в конечном итоге, сборка, после некоторых мытарств, с библиотеками GCC пошла:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ clang++ -O3 -I/usr/include/c++/11/ -I/usr/include/x86_64-linux-gnu/c++/11 -L /usr/lib/gcc/x86_64-linux-gnu/11 fibo_cc.cc -o fibo_cl

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ ls -l fibo_cl
-rwxrwxr-x 1 olej olej 16776 янв 13 00:27 fibo_cl

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ time ./fibo_cl 45
1836311903

real    0m5,065s
user    0m5,063s
sys     0m0,000s

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

Clang

Непрочитанное сообщение Olej » 13 янв 2024, 03:14

Olej писал(а):
13 янв 2024, 02:07
И, в конечном итоге, сборка, после некоторых мытарств, с библиотеками GCC пошла:
Теперь хотелось бы собрать точно тот же код, но с C++ библиотекой Clang (libc++).
Но тут поджидает следующий облом: :cry:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ clang++ -O3 -I/usr/include/c++/11/ -I/usr/include/x86_64-linux-gnu/c++/11 -stdlib=libc++ fibo_cc.cc -o fibo_cl
/usr/bin/ld: невозможно найти -lc++: Нет такого файла или каталога
clang: error: linker command failed with exit code 1 (use -v to see invocation)
А запуск с опцией -v кое-что подсказывает:

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

olej@R420:~/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo$ clang++ -v -O3 -I/usr/include/c++/11/ -I/usr/include/x86_64-linux-gnu/c++/11 -stdlib=libc++ fibo_cc.cc -o fibo_cl
Ubuntu clang version 14.0.0-1ubuntu1.1
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/10
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/12
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/9
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Selected multilib: .;@m64
 "/usr/lib/llvm-14/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name fibo_cc.cc -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -v -fcoverage-compilation-dir=/home/olej/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo -resource-dir /usr/lib/llvm-14/lib/clang/14.0.0 -I /usr/include/c++/11/ -I /usr/include/x86_64-linux-gnu/c++/11 -internal-isystem /usr/lib/llvm-14/lib/clang/14.0.0/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -fdeprecated-macro -fdebug-compilation-dir=/home/olej/2024/own.BOOKs/BHV.Go.2/examples/compare/fibo -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -vectorize-loops -vectorize-slp -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/fibo_cc-b533cb.o -x c++ fibo_cc.cc
clang -cc1 version 14.0.0 based upon LLVM 14.0.0 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/11
 /usr/include/x86_64-linux-gnu/c++/11
 /usr/lib/llvm-14/lib/clang/14.0.0/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
 "/usr/bin/ld" -pie --hash-style=both --build-id --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o fibo_cl /lib/x86_64-linux-gnu/Scrt1.o /lib/x86_64-linux-gnu/crti.o /usr/bin/../lib/gcc/x86_64-linux-gnu/12/crtbeginS.o -L/usr/bin/../lib/gcc/x86_64-linux-gnu/12 -L/usr/bin/../lib/gcc/x86_64-linux-gnu/12/../../../../lib64 -L/lib/x86_64-linux-gnu -L/lib/../lib64 -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib64 -L/usr/lib/llvm-14/bin/../lib -L/lib -L/usr/lib /tmp/fibo_cc-b533cb.o -lc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/bin/../lib/gcc/x86_64-linux-gnu/12/crtendS.o /lib/x86_64-linux-gnu/crtn.o
/usr/bin/ld: невозможно найти -lc++: Нет такого файла или каталога
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Он ищёт в -L/usr/lib/llvm-14/bin/../lib ... но такого каталога нет:

Ответить

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

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

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