代码之家  ›  专栏  ›  技术社区  ›  Douglas Leeder

添加链接器选项以增强hpux上的构建

  •  0
  • Douglas Leeder  · 技术社区  · 15 年前

    在hpux上,我需要使用+h链接选项来获取Boost1.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 节,但该节包含shell命令。

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

    最后,我尝试创建一个单独的工具集作为 gcc.jam ( hpuxgcc.jam 但我根本没法让它发挥作用。我想还有更多的地方需要更改变量名,但是jam语法超出了我的理解范围。

    有没有人对如何让这个工作有更好的想法?或者我应该在构建Boost之前把这个黑客版本转换成一个补丁吗?当然有更好的方法吗?

    你猜问题是:

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

    或:

    b)如何根据 果酱 ?

    更容易…

    1 回复  |  直到 11 年前
        1
  •  1
  •   Vladimir Prus    15 年前

    H选项的作用是什么?它设置了“奏鸣曲”吗?如果是,请注意在同一动作中使用了“有奏鸣曲”和“奏鸣曲”选项。然后,注意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问题,而不是堆栈溢出。