如何修改传递给ld的选项,而无需重新编译gcc

时间:2009-07-01 11:39:44

标签: c++ gcc solaris

我正在尝试使用gcc 3.4.6和。在solaris 2.7上编译共享库 它链接到静态链接的c .a和.o文件。 请注意,它使用来自路径“/ usr / ccs / bin / ld”

的Sun ld

在链接时,我得到一长串符号并跟随错误

ld: fatal: relocations remain against allocatable but non-writable sections

collect2: ld returned 1 exit status

然后我尝试构建它将-z textoff选项传递给ld。但我得到了以下错误

ld: fatal: option -ztextoff and -ztext are incompatible

ld: fatal: Flags processing errors

还有其他方法我不需要重新编译gcc并仍然修改传递给ld的选项。

3 个答案:

答案 0 :(得分:3)

错误是将位置相关代码链接到共享库的结果。这样的代码将导致库不可共享,从而浪费RAM。

如果您可以重建您尝试链接到共享库的所有对象,那么最简单(也是最正确)的解决方案是使用-fPIC标志重建所有对象。

但是,有时您必须将无法重建的非PIC对象代码链接到共享库,因此您需要删除-ztext选项。为此,请在链接行中添加-mimpure-text选项。

答案 1 :(得分:0)

从命令行运行 ld 可执行文件(而不是通过gcc) - 然后您可以传递任何您想要的参数。我不认为这会解决您的潜在问题 - 您可能想发布一个关于它们的问题。

答案 2 :(得分:0)

您是否正在使用make或其他构建系统来调用编译器?

如果更改构建系统中的选项以在链接阶段专门使用链接器而不是使用编译器。

第1步:查找gcc传递的标志

添加-v标志。它使gcc详细。

  

CXXFLAGS + = -v

步骤2:修改链接阶段以明确使用gcc正在调用的工具。