0

在 HPUX 上,我需要使用 +h 链接选项来让 boost 1.39.0 共享库包含正确的路径。

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

(来自http://www.nabble.com/HPUX-aCC:-Howto-avoid-building-boost-libraries- contains -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)

但是现在我想要一个永久的解决方案,但我不知道如何解决。

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

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

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

有没有人有更好的想法如何让它工作?还是我应该在构建 Boost 之前将 hacky 版本转换为我运行的补丁?肯定有更好的方法吗?

猜测问题是:

a) 我如何(视平台而定)将文本添加到 gcc.jam 中的链接器命令

或者:

b) 我如何创建一个基于 的新工具集gcc.jam

哪个更容易...

4

1 回答 1

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 问题来说,这比堆栈溢出问题要好得多。

于 2009-09-06T07:05:00.183 回答