序言:这个问题不是关于 Oracle,而是我想了解 gcc-4 和 gcc-6 在处理位置无关代码方面的根本区别。
所以我决定尝试在 Debian 上安装 Oracle 12c。
在与 gcc-6 的链接阶段,会发出如下错误消息:
/usr/bin/ld: /opt/oracle/product/12.2.0/lib/libpls12.a(pci.o):
relocation R_X86_64_32S against `.rodata.str1.4' can not be used when making a shared object;
recompile with -fPIC.
但是,如果我将编译器切换为使用 gcc-4.9,则所有链接都可以顺利完成。
因此我的2个问题:
- gcc 版本 4 和 6 之间的 -fPIC 和 -fPIE 的默认值是否有变化?很可能是的,版本 6 似乎默认使用 2 个选项。
- 对我来说更重要的是:gcc 版本 6 是否可以选择使用版本 4 的行为来生成与位置无关的代码?(或者我迟早会因为 gcc-4 不再可用而无法链接旧库?)