应该编译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++代码不会受到影响。 我认为这取决于GCC版本。大约在那个时候,GCC开始默认启用PIE,这导致了一些链接问题。例如,请参见。从邮件列表消息: 。。。此消息的其余部分解释了上面的-fPIC-fPIE。在…上 与Ubuntu的长期支持版本完全相同 假定兼容系统提供的gcc和clang版本,如果 你跑应该编译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&
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:链接独立于位置的可执行文件
- 默认情况下打开-fPIC和-fPIE
- 对任何位置相关代码发出自动警告
- 等待一段特定的时间,让人们摆脱任何以前编译的位置相关代码,最后
- 默认情况下启用-pie
根据编译器工具链的特定版本,
g++
默认情况下,是的,编译结果可能会有所不同,因为TU 18.04具有g++-7.4.0
。。。Ubuntu 19.04拥有g++-8.3.0
。