"Связывание CXX исполняемого сервера мира" завершается неудачно

Связывание исполняемого CXX worldserver на 99% при компиляции после сбоя предварительно скомпилированного cmake.

[ 99%] Linking CXX executable worldserver
/usr/bin/ld: ../../../deps/jemalloc/libjemalloc.a(jemalloc.c.o): relocation R_X86_64_32S against symbol `sz_size2index_tab' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ../../../deps/jemalloc/libjemalloc.a(large.c.o): relocation R_X86_64_32S against symbol `sz_size2index_tab' can not be used when making a PIE object; recompile with -fPIC

и т.п.

Ошибка: https://pastebin.com/pVEkzzNs

Я использую последнюю версию Ubuntu и пытаюсь установить последнюю версию AzerothCore для каждого SSH (без автоустановщика).

Ожидаемое: все должно работать хорошо. Фактически: двоичные файлы даже не создаются.

2 ответа

Решение

Сообщение об ошибке relocation R_X86_64_32S ... can not be used when making a PIE object; recompile with -fPIC указывает, что, скорее всего, проект включает в себя предварительно скомпилированные библиотеки для libjemalloc.a которые не скомпилированы как код PIC. Поскольку Ubuntu недавно переключился на компиляцию независимых от позиции исполняемых файлов по умолчанию, с настройками цепочки инструментов по умолчанию все объекты, входящие в исполняемый файл, должны быть скомпилированы в режиме PIC.

Я, вероятно, связался бы с сопровождающим (ями) проекта, который вы пытаетесь создать, и уведомил бы их об этой проблеме совместимости. Тем временем вы можете обойти эту проблему, установив CMAKE_EXE_LINKER_FLAGS в -no-pie (например, отредактируйте переменную в ccmake или же cmake-gui - вам, вероятно, придется включить отображение "расширенных переменных" - или указать его в командной строке cmake, используя что-то вроде cmake /path/to/source -DCMAKE_EXE_LINKER_FLAGS=-no-pie). Обратите внимание, что это несколько снижает безопасность получаемого исполняемого файла, так как тогда ядро ​​не сможет применить рандомизацию адресного пространства к базовому исполняемому файлу.

Просто интересно, если вы установили правильный путь.

Я вижу, вы используете root? Компилировать для пользователя.

root@core /home/users/tide/wow/source/build # cmake ../ -DCMAKE_INSTALL_PREFIX=/home/users/tide/wow/server -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILERT=/usr/bin/clang++ -DTOOLS=0 -DWITH_WARNINGS=1 -DSCRIPTS=1

Просто интересно, ты уверен, что путь не в этом ниже.

root@core /home/tide/wow/source/build # cmake ../ -DCMAKE_INSTALL_PREFIX=/home/tide/wow/server -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILERT=/usr/bin/clang++ -DTOOLS=0 -DWITH_WARNINGS=1 -DSCRIPTS=1```
Другие вопросы по тегам