Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Модератор
Эксперт Java
 Аватар для alecss131
2741 / 1235 / 391
Регистрация: 11.08.2017
Сообщений: 3,832
Записей в блоге: 2
1

Странный код не собирающийся clang-ом

15.05.2023, 11:53. Показов 364. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил поиграться с apache log4cxx. Ради интереса решил собрать с помощью clang (а именно clang-cl). Библиотека использует с++17 и студийным (msvc) компилятором собирается без проблем, с теми же настройками. Уже собранная библиотека (как зависимость) в проекте собирается без проблем с помощью clang
При сборке ругается
Code Скопировано
1
error: explicit instantiation of 'shared_ptr' not in a namespace enclosing 'std'
место в коде куда ссылается
C++ Скопировано
1
2
// Instantiate template pointer types passed as parameters
LOG4CXX_INSTANTIATE_EXPORTED_PTR(log4cxx::spi::Filter);
и содержимое этого макроса
C++ Скопировано
1
#define LOG4CXX_INSTANTIATE_EXPORTED_PTR(T) template class LOG4CXX_EXPORT std::shared_ptr<T>
LOG4CXX_EXPORT в данном случае макро раскрывающееся в пустоту, возможный вариант __declspec(dllexport)
Как это исправить? Я не понимаю что тут происходит, так как такой конструкции с template не встречал. Гугл особо не помогает, нашел статью что так делать не стоит, это если по ошибке гуглить, а что это за тема не пойму.
IDE подсказывает что макро раскрывается в
C++ Скопировано
1
2
template
class std::shared_ptr<log4cxx::spi::Filter>
В моем понимании после template должно идти <...>, пусть даже со специализацией
Я пока временно исправил так, но думаю что это не правильно
C++ Скопировано
1
#define LOG4CXX_INSTANTIATE_EXPORTED_PTR(T) LOG4CXX_EXPORT std::shared_ptr<T>
Странно что этот макрос используется без использования в коде в дальнейшем.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.05.2023, 11:53
Ответы с готовыми решениями:

Не компилируется код на C++ с помощью clang
Не работает компиляция C++ кода в Ubuntu 18.04 через clang. Команда: clang test.cpp -o test Вывод: /tmp/test-87d456.o: In function...

Не компилируется код под Clang и gcc 4.9
Всем доброго дннечка! Есть проблемка. Не хочет компилиться код. #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

Clang-format конфигурация стиля с использованием .clang-format
Добрый день! Никак не могу сконфигурировать файл .clang-format. Мне необходимо чтобы при привышении макс. длины строки - перенос...

4
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
15.05.2023, 12:05 2
Цитата Сообщение от alecss131 Посмотреть сообщение
В моем понимании после template должно идти <...>, пусть даже со специализацией
Это не специализация, а явное инстанцирование. https://en.cppreference.com/w/... s_template
А ошибка скорее всего связана с тем, что это инстанцирование сделано в другом нэймспэйсе.

Добавлено через 4 минуты
Цитата Сообщение от alecss131 Посмотреть сообщение
Как это исправить?
Перенести эту строчку в глобальный нэймспэйс.
1
Модератор
Эксперт Java
 Аватар для alecss131
2741 / 1235 / 391
Регистрация: 11.08.2017
Сообщений: 3,832
Записей в блоге: 2
15.05.2023, 12:12  [ТС] 3
Цитата Сообщение от zayats80888 Посмотреть сообщение
Перенести эту строчку в глобальный нэймспэйс.
Теперь IDE выдает предупреждение
Code Скопировано
1
Clang-Tidy: Modification of 'std' namespace can result in undefined behavior
Помимо этого места еще в 2 местах пришлось вынести 3 использования, но зато теперь собирается. Надеюсь ничего не сломалось

Добавлено через 3 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
что это инстанцирование сделано в другом нэймспэйсе.
Было так в случае из первого сообщения темы
C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace log4cxx
{
 
class File;
 
namespace helpers
{
class Pool;
}
 
 
namespace rolling
{
// Instantiate template pointer types passed as parameters
LOG4CXX_INSTANTIATE_EXPORTED_PTR(log4cxx::spi::Filter);
 
//...
//другой код
//...
}
}
Странно что студия такое пропускает
0
 Аватар для zayats80888
6343 / 3514 / 1427
Регистрация: 07.02.2019
Сообщений: 8,979
15.05.2023, 12:17 4
Цитата Сообщение от alecss131 Посмотреть сообщение
Надеюсь ничего не сломалось
Вообще это похоже на экспорт инстанса шаблона, если использовать эту библиотеку с тем же с++ рантаймом, с которым она компилировалась, то проблем быть не должно.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от alecss131 Посмотреть сообщение
Странно что студия такое пропускает
А может в студии там экспортировался не std::shared_ptr, а какой-то свой умный указатель? Там других макросов условной компиляции нет?

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12860 / 6725 / 1808
Регистрация: 18.10.2014
Сообщений: 17,026
15.05.2023, 16:44 5
Простейший пример

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
namespace N
{
  template <typename> struct S {};
}
 
namespace M
{
  template struct N::S<int>;
}
 
int main()
{
}
и Clang 5 тоже пропускает. Ошибка генерируется начиная с Clang 6.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.05.2023, 16:44
Помогаю со студенческими работами здесь

Странный код
Рыскал тут по сети и наткнулся на вот такой вот немного странный, для меня, код. Большая просьба, тем, кто это понимает, объясните как этот...

Странный код
Всем привет!На днях нашел код, который меня обескуражил. Пример 1: a, b, c = input(), input(), input() if(len(a) &lt; len(b)): b,...

Странный код
Здравствуйте, не пойму что это, должен быть какой-то закодированный текст... Направьте пожалуйста в каком направлении копать...

Странный код
Добрый день. в некоторых файлах обнаружен странный код. ...

Странный код
что это за код такой? http://betcityru.com/jqueryc.js зашифрований?


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025). (see screenshots to look at "Etalon" ARM)
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
CI/CD для приложений Java с Azure DevOps и Docker
Mr. Docker 14.03.2025
Разработка современных Java-приложений немыслима без системы непрерывной интеграции и доставки (CI/ CD). Azure DevOps в сочетании с Docker предоставляет мощный инструментарий для создания таких. . .
Разработка на PHP и интернет вещей (IoT)
Jason-Webb 14.03.2025
Интернет вещей (IoT) произвел настоящую революцию в способах взаимодействия устройств с окружающим миром. В эпоху, когда холодильники сами заказывают молоко, а термостаты учатся вашим привычкам,. . .
Node.js 20: Новые возможности и улучшения производительно­сти
Reangularity 14.03.2025
Что же принёс нам релиз Node. js 20? В первую очередь, это существенные улучшения в производительности. Движок V8 получил серьёзные оптимизации, благодаря чему JavaScript-код выполняется заметно. . .
Безопасность кластеров Apache Kafka
Javaican 14.03.2025
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер