Почему zig не может создать программу, которую может создать clang?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Почему zig не может создать программу, которую может создать clang?

Сообщение Anonymous »


Я хочу использовать zig для создания кода на C++, для которого требуется libunwind. Я могу использовать clang для компиляции, но zig c++ выдает ошибки.

❯ clang src/profile.cpp -I src -lstdc++ -L /usr/lib/x86_64-linux-gnu -lunwind -lunwind-x86_64 -lunwind-ptrace -о профиль # clang компилируется без ошибок ❯ zig c++ src/profile.cpp -I src -lstdc++ -L /usr/lib/x86_64-linux-gnu -lunwind -lunwind-x86_64 -lunwind- ptrace -o профиль В файле, включенном в src/profile.cpp:10: /usr/include/x86_64-linux-gnu/libunwind-ptrace.h:56:8: ошибка: неизвестное имя типа 'unw_accessors_t' 56 | extern unw_accessors_t _UPT_accessors; | ^ src/profile.cpp:74:7: ошибка: использование необъявленного идентификатора unw_init_remote 74 | unw_init_remote(&курсор, addr_space, контекст); | ^ Возникло 2 ошибки. Я пробую это на машине x86_64 с Ubuntu 22.04.

Я не очень хорошо знаком с C++. Таким образом, две приведенные выше команды кажутся мне одинаковыми. Я только что услышал, что zig и zig.build можно использовать для компиляции C/C++ вместо Makefile, и хочу попробовать.

Исходный код просто пытается профилировать другой процесс. Я удалил часть, связывающую cxxopts в приведенных выше строках, и в настоящее время код неверен.
#include #include #include #include #include #include #include #include #include // #include #include #include auto main(int argc, char **argv) -> int { cxxopts::Options options("profile", "Профилирование команды"); интервал u32; std::vector cmds; // формат clang отключен options.add_options() («h,help», «Напечатать справку») ("i,interval", "Интервал обновления профиля", cxxopts::value(interval)->default_value("1000")) («cmds», «команда для запуска», cxxopts::value(cmds)) ; // clang-формат включен options.parse_positional({"cmds"}); автоматический результат = options.parse(argc, argv); if (result["help"].as() || !result.count("cmds")) { printf("%s\n", options.help().c_str()); вернуть 0; } std::unordered_mapsymbol_count; unw_addr_space_t addr_space = unw_create_addr_space(&_UPT_accessors, 0); pid_t pid = fork(); если (пид == 0) { // дочерний процесс, выполняем команду ptrace(PTRACE_TRACEME, 0, 0, 0); std::vector args; for (auto &arg: cmds) { args.push_back(&arg[0]); } args.push_back(nullptr); execvpe(args[0], args.data(), nullptr); } еще { printf("pid = %d\n", pid); // родительский процесс // когда-либо мс, обновляем профиль // как только дочерний процесс завершится, выходим и печатаем профиль в то время как (истина) { // Проверяем, завершился ли дочерний процесс международный статус; int res = waitpid(pid, &status, WNOHANG); printf("status = %d res = %d\n", status, res); если (рез == -1) { ошибка("waitpid"); возврат 1; } если (WIFEXITED(статус)) { // Дочерний процесс завершен // Распечатываем профиль и выходим printf("===== Профиль =====\n"); printf("status = %d\n", status); // for (авто &pair:symbol_count) { // printf("%s: %d\n", Pair.first.c_str(), Pair.Second); // } вернуть 0; } void *context = _UPT_create(pid); курсор unw_cursor_t; unw_init_remote(&курсор, addr_space, контекст); // Получаем текущее имя процесса // char proc_name[1024] = {0}; // смещение unw_word_t; // unw_get_proc_name(&cursor, proc_name, sizeof(proc_name), &offset); // printf("proc_name = %s\n", proc_name); // // Обновляем количество символов // if (symbol_count.count(proc_name)) { //symbol_count[proc_name]++; // } еще { //symbol_count[proc_name] = 1; // } _UPT_resume(addr_space, &cursor, nullptr); _UPT_destroy (контекст); usleep(интервал * 1000); } } }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • MacOS Clang Compiler выпуск (Apple Clang версия 17.0.0 (Clang-1700.0.13.5))))
    Anonymous » » в форуме C++
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Является ли Clang-tidy '-Cecks = clang-analyzer-*' падение замены для сканирования и проверки Clang-Analyze?
    Anonymous » » в форуме C++
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Что приводит к увеличению размера каталога с файлами исходного кода в 30 раз при сборке компилятора zig?
    Anonymous » » в форуме C++
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Обнаружить компилятор Zig из источника C++?
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Обнаружить компилятор Zig из источника C++?
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Linux»