c++ - “链接 CXX 可执行文件 worldserver”失败

标签 c++ cmake clang jemalloc azerothcore

在 cmake 已预编译失败后,链接 CXX 可执行文件 worldserver 在 99% 编译时失败。

[ 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 并尝试通过 SSH 安装最新的 AzerothCore(无自动安装程序)。

预期:一切都应该运行良好。 实际:二进制文件甚至没有被创建。

最佳答案

错误消息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 (例如,编辑 ccmakecmake-gui 中的变量 - 您可能必须启用“高级变量”的显示 - 或使用类似 cmake /path/to/source -DCMAKE_EXE_LINKER_FLAGS=-no-pie 在 cmake 命令行上指定它)。请注意,这确实会在一定程度上降低生成的可执行文件的安全性,因为内核将无法将地址空间随机化应用于基本可执行文件。

关于c++ - “链接 CXX 可执行文件 worldserver”失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54637025/

相关文章:

c++ - 在QT中为MacO和Windows创建安装程序的过程

c - getdate 和 strptime 什么时候不包含在 time.h 中?

c++ - 使用线程查找友好号码比 C++ 中的单线程花费更多时间

c++ - 带有标题的循环依赖。使用#ifndef 和#define

c++ - 是否可以使函数模板对不适当的类型而不是错误执行默认操作?

c++ - 函数模板在 clang 中失败

c++ - 如何知道 IntegerLiteral 是来自 Clang 的十进制还是八进制表示?

c++ - 在 Visual Studio 中从 C++ 代码中检索 AST

gcc - 如何在编译期间强制 cmake 包含 "-pthread"选项?

c++ - 如何在 CMake 中添加 "-l"(ell) 编译器标志