应该编译c++;在Xubuntu 19.04中,不同于编译c++;在Ubuntu 18.04中 < >在Ubuntu 18.04中没有编译错误的C++代码,而在Xunbuntu 19.04中没有编译。我最初的猜测是否定的,但后来一位教授告诉我,有一些链接器问题可能会导致这种情况。我还要补充一点,代码是使用相同的std和g++编译的 < >在Ubuntu 18.04中没有编译错误的C++代码,在Xunbuntu 19.04中没有编译。

应该编译c++;在Xubuntu 19.04中,不同于编译c++;在Ubuntu 18.04中 < >在Ubuntu 18.04中没有编译错误的C++代码,而在Xunbuntu 19.04中没有编译。我最初的猜测是否定的,但后来一位教授告诉我,有一些链接器问题可能会导致这种情况。我还要补充一点,代码是使用相同的std和g++编译的 < >在Ubuntu 18.04中没有编译错误的C++代码,在Xunbuntu 19.04中没有编译。,c++,linux,ubuntu,C++,Linux,Ubuntu,可能吧,但它只出现在极端情况下。大多数C++代码不会受到影响。 我认为这取决于GCC版本。大约在那个时候,GCC开始默认启用PIE,这导致了一些链接问题。例如,请参见。从邮件列表消息: 。。。此消息的其余部分解释了上面的-fPIC-fPIE。在…上 与Ubuntu的长期支持版本完全相同 假定兼容系统提供的gcc和clang版本,如果 你跑 gcc -c x.c; clang -c y.c; gcc -o x x.o y.o x.c.说什么 #include <stdio.h&

可能吧,但它只出现在极端情况下。大多数C++代码不会受到影响。 我认为这取决于GCC版本。大约在那个时候,GCC开始默认启用PIE,这导致了一些链接问题。例如,请参见。从邮件列表消息:

。。。此消息的其余部分解释了上面的-fPIC-fPIE。在…上 与Ubuntu的长期支持版本完全相同 假定兼容系统提供的gcc和clang版本,如果 你跑

   gcc -c x.c; clang -c y.c; gcc -o x x.o y.o
x.c.说什么

   #include <stdio.h>
   extern int thenumber(void);
   int main() { printf("%d\n",thenumber()); return 0; }
然后编译失败,而执行

   gcc -c x.c; clang -c y.c; clang -o x x.o y.o

   gcc -c x.c; gcc -c y.c; gcc -o x x.o y.o
   clang -c x.c; clang -c y.c; clang -o x x.o y.o

   gcc -c x.c; gcc -c y.c; gcc -o x x.o y.o
   clang -c x.c; clang -c y.c; clang -o x x.o y.o
很好。潜在的问题是编译器编写器对 正在进行的向

  • -fPIC:将库编译为“位置独立代码”(这通常被宣传为对共享库很重要)

  • -fPIE:将main()等编译为独立于位置的代码(这通常被宣传为对声明的安全性很重要) 地址空间布局随机化的好处);及

  • -pie:链接独立于位置的可执行文件

编译为位置无关代码的代码可以链接到 位置相关可执行文件或位置独立可执行文件。A. 正确管理的过渡应该包括

  • 默认情况下打开-fPIC和-fPIE

  • 对任何位置相关代码发出自动警告

  • 等待一段特定的时间,让人们摆脱任何以前编译的位置相关代码,最后

  • 默认情况下启用-pie

相反,gcc突然启动了——派,笨拙地 打破所有现有的职位相关代码,甚至管理 破坏与同一系统上的clang的兼容性--clang still 生成位置相关的代码,然后gcc无法生成 可执行文件。这也是gcc现在崩溃的原因 加密kem/ntruhrss701/avx2


根据编译器工具链的特定版本,
g++
默认情况下,是的,编译结果可能会有所不同,因为TU 18.04具有
g++-7.4.0
。。。Ubuntu 19.04拥有
g++-8.3.0