2017-07-24 103 views
0

長話短說:我曾在relative rpath linkingthis script(即uses的automake,autoconf的,libtool的)。 的問題是,在二進制可執行文件或so文件最終rpath/runpath條目仍具有絕對路徑:如何,何時,在哪裏設置的libtool腳本變量? (例如hardcode_minus_L)

  • 原來的libtool默認情況下,像這樣與hardcode_libdir_flag_spec配置爲包括任何-L值,如果它被設置在LDFLAGS

唯一的問題是:如何以及在該點(什麼是適當的方式),我可以設置其他libtool的變量,如hardcode_minus_L。 (我搜索了它在網絡上,但我無法找到任何東西。)

我試着做到以下幾點:

  • 被調用後configure我試圖替換變量的值與sedlibtool文件(在正確的目錄):它的工作,但是當make把它叫做再次改寫整個libtool文件(這是再生)

注意,這2個二進制文件是由這個影響,對於入門rpath/runpathobjdump -p

  • libcurl.soRUNPATH /home/user1/lib/rtorrent-0.9.7-1.5.3/lib:$ORIGIN/../lib
  • rtorrentRUNPATH $ORIGIN/../lib:/home/user1/lib/rtorrent-0.9.7-1.5.3/lib

感謝

回答

0

原來,它很容易在configure.ac修改這些變量,無需sed - 擺弄周圍和服用後一看到生成的腳本中。唯一可能引起混淆的是,這些變量可以應用於給定項目中定義的 tags

E.g.在rtorrent項目(意味着它將打破編譯)改變hardcode_libdir_flag_spec爲空值,你會插入configure.ac

_LT_TAGVAR(hardcode_libdir_flag_spec,)="" 
_LT_TAGVAR(hardcode_libdir_flag_spec, CXX)="" 
_LT_TAGVAR(hardcode_minus_L,)=yes 
_LT_TAGVAR(hardcode_minus_L, CXX)=yes 

的第二個參數是tagdefault標籤,如果它是空的。

+0

請注意,我無法解決原來的問題,無論我嘗試使用它們:)因此,我只是堅持使用'chrpath' util來更改二進制文件中生成的'rpath'條目。 – Krisztian

1

我不知道是否修改生成的libtool腳本是解決問題的最佳辦法。但是如果你這樣做,你需要通過在AC_CONFIG_COMMANDS內執行sed命令來使方法健全。

libtool腳本在config.status期間生成爲配置命令(AC_CONFIG_COMMANDShttps://www.gnu.org/software/autoconf/manual/autoconf.html#Configuration-Commands)。

config.status: executing libtool commands 

您可以通過添加另一個AC_CONFIG_COMMANDS來修改此生成的文件。 我們使用以下改變prefer_static_libs變量:

AC_CONFIG_COMMANDS([libtool-fix-linker-preference],                              
    [${SED} -e '1,/prefer_static_libs=/ s/prefer_static_libs=.*$/prefer_static_libs=yes/' \ 
    libtool > libtool.fix && mv libtool.fix libtool]) 

你需要你的AC_CONFIG_COMMANDSLT_INIT觸發。 configure/config。狀態報告執行:

config.status: executing libtool commands 
config.status: executing libtool-fix-linker-preference commands 

希望幫助,

基督教

+0

感謝您的回答。不幸的是,這不適用於rtorrent:它首先觸發[autogen.sh](https://github.com/rakshasa/rtorrent/blob/226e670decf92e7adaa845a6982aca4f164ea740/autogen.sh),它不會觸發自定義的AC_CONFIG_COMMANDS在[configure.ac](https://github.com/rakshasa/rtorrent/blob/226e670decf92e7adaa845a6982aca4f164ea740/configure.ac)開頭:在配置輸出結束時只有以下行可見:'config.status:execution libtool命令' – Krisztian

+0

感謝您的回答,再次,它告訴我,我正朝着正確的方向前進(所以我向你致敬)。 – Krisztian

相關問題