Добавьте опцию линкера, чтобы ускорить сборку на HPUX

В 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)

Но сейчас я хочу постоянное решение, и я не могу понять, как.

Сначала я попытался поставить условное выражение bjam в actions link.dll раздел, но этот раздел содержит команды оболочки.

Затем я попытался добавить дополнительный раздел в переменную OPTIONS для этих целей. Но это, похоже, не повлияло на ссылку.

Наконец я попытался создать отдельный набор инструментов в качестве копии gcc.jam (hpuxgcc.jam), но я не мог заставить это работать вообще. Я думаю, есть еще места, где мне нужно изменить имена переменных, но синтаксис Jam выходит за рамки того, что я понимаю.

У кого-нибудь есть идея, как заставить это работать? Или я должен просто преобразовать хакерскую версию в патч, который я запускаю перед сборкой Boost? Конечно, есть лучший способ?

Угадай вопрос или:

а) Как (условно для платформы) добавить текст в команду компоновщика в gcc.jam

Или же:

б) Как мне создать новый набор инструментов на основе gcc.jam?

Что всегда легче...

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, чем переполнение стека.

Другие вопросы по тегам