添加链接器选项以在HPUX上增强构建

时间:2009-09-04 15:39:49

标签: boost hp-ux

在HPUX上我需要使用+ h link选项来获取boost 1.39.0共享库以包含正确的路径。

-Wl,+h$(SPACE)-Wl,$(<[-1]:D=) 

(来自http://www.nabble.com/HPUX-aCC:-Howto-avoid-building-boost-libraries-containing-absolute-library-path-references-when-calling-bjam-install-td17619511.html

我已经通过黑客攻击gcc.jam工具集文件来测试它的工作原理:

796c796
<     "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)
---
>     "$(CONFIG_COMMAND)" -L"$(LINKPATH)" -Wl,+h$(SPACE)-Wl,$(<[-1]:D=) -Wl,$(RPATH_OPTION:E=-R)$(SPACE)-Wl,"$(RPATH)" "$(.IMPLIB-COMMAND)$(<[1])" -o "$(<[-1])" $(HAVE_SONAME)-Wl,$(SONAME_OPTION)$(SPACE)-Wl,$(<[-1]:D=) -shared $(START-GROUP) "$(>)" "$(LIBRARIES)" $(FINDLIBS-ST-PFX) -l$(FINDLIBS-ST) $(FINDLIBS-SA-PFX) -l$(FINDLIBS-SA) $(END-GROUP) $(OPTIONS) $(USER_OPTIONS)

但现在我想要一个永久的解决方案,而我无法弄清楚如何。

首先,我尝试在actions link.dll部分中添加bjam条件,但该部分包含shell命令。

然后我尝试将额外部分添加到这些目标的OPTIONS变量中。但这似乎对链接没有任何影响。

最后,我尝试创建一个单独的工具集作为gcc.jamhpuxgcc.jam)的副本,但我根本无法工作。我想我需要更多地方来更改变量名称,但Jam语法超出了我的理解范围。

有没有人更好地了解如何让它发挥作用?或者我应该将hacky版本转换为我在构建Boost之前运行的补丁?当然有更好的方法吗?

猜测问题是:

a)我如何(以平台为条件)将文本添加到gcc.jam中的链接器命令

或者:

b)如何基于gcc.jam创建新工具集?

哪个更容易......

1 个答案:

答案 0 :(得分:1)

-h选项有什么作用?它设置了“soname”吗?如果是这样,请注意HAVE_SONAME和SONAME_OPTION在同一操作中使用。然后,记下gcc.jam中设置的代码块:

if [ os.name ] != NT && [ os.name ] != OSF && [ os.name ] != HPUX && [ os.name ] != AIX
{
    # OSF does have an option called -soname but it does not seem to work as
    # expected, therefore it has been disabled.
    HAVE_SONAME   = "" ;
    SONAME_OPTION = -h ;
}

您可以根据自己的平台进行调整。

我建议您在boost-boost@lists.boost.org上进行跟进,这对于Boost.Build问题比堆栈溢出要好得多。