Как скомпилировать QEMU с поддержкой SPICE для macOS - PullRequest
2 голосов
/ 08 января 2020

Чтобы приблизиться к опыту, который предлагает Parallels Desktop для Ma c, я хотел бы запустить виртуальную машину Windows 10 с графическим драйвером QXL и поддержкой SPICE на хост-компьютере macOS. К сожалению, ни двоичный файл QEMU в Homebrew , ни в MacPorts не поддерживает SPICE.

QEMU не требуется библиотека spice-protocol и spice-server для компиляции с поддержкой SPICE. Хотя пакет spice-protocol доступен для macOS, я не могу найти предварительно скомпилированный пакет spice-server. Когда я пытался скомпилировать spice-0.14.2 под macOS, я обнаружил следующую ошибку:

/Library/Developer/CommandLineTools/usr/bin/make  all-recursiveMaking all in .
  CC       red-stream.lo
  CC       red-worker.lo
red-worker.c:1164:40: error: too many arguments to function call, expected 1, have 2
    pthread_setname_np(worker->thread, "SPICE Worker");
    ~~~~~~~~~~~~~~~~~~                 ^~~~~~~~~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/pthread.h:512:1: note: 'pthread_setname_np' declared here
__API_AVAILABLE(macos(10.6), ios(3.2))
^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/Availability.h:496:162: note: expanded from macro '__API_AVAILABLE'
  ...__API_AVAILABLE6, __API_AVAILABLE5, __API_AVAILABLE4, __API_AVAILABLE3, __API_AVAILABLE2, __API_AVAILABLE1, 0)(__VA_ARGS__)
                                                                             ^
1 error generated.

1 Ответ

1 голос
/ 26 апреля 2020

После некоторых исследований выясняется, что в macOS pthread_setname_np можно использовать только для изменения имени вызывающего потока.

Из того, что я могу сказать, это необходимо только для целей отладки, и вы можете смело закомментировать строку при компиляции для macOS. (Вы также можете использовать условную компиляцию, но нет причин, если вы просто пытаетесь скомпилировать QEMU с поддержкой SPICE.)


Редактировать server/red-worker.c и закомментировать следующую строку:

pthread_setname_np(worker->thread, "SPICE Worker");

(я использовал nano. Вы можете использовать CTRL + W для поиска pthread_setname_np(.)


Требуются дополнительные изменения для скомпилируйте сервер SPICE для macOS (по состоянию на 0.14.3)

  1. Если при запуске ./autogen.sh появляется следующая ошибка:

    configure: error: Package requirements (openssl >= 1.0.0) were not met:
    
    No package 'openssl' found
    

    Затем установите следующую среду переменные:

    export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"
    export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
    export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
    
  2. Добавьте следующую строку где-нибудь в верхней части server/red-stream.c и server/tests/test-websocket.c:

    #define MSG_NOSIGNAL 0x2000 /* don't raise SIGPIPE */
    
  3. In server/tools/reds_stat.c заменить следующую строку:

    reds_stat = mremap(reds_stat, shm_old_size, shm_size, MREMAP_MAYMOVE);
    

    на:

    munmap(reds_stat, shm_old_size);
    reds_stat = mmap(0, shm_old_size, PROT_READ | PROT_WRITE, MAP_SHARED, -1, 0);
    
  4. Если я ничего не забыл, все остальные ошибки могут быть "решены" удалив все вхождения -Werror из Makefile s.

...