2013-08-23 32 views
0

我覺得有些荒謬,但我試圖將OpenBLAS庫導入到項目中。它們是用Fortran編譯器gfortran構建的。我的早期版本沒有問題,只是拉libopenblas.so,但在另一個系統上,當我嘗試運行我們的程序時,它在libgfortran.so上窒息,而在那裏並不存在。我的印象是,這是大多數(如果不是全部的話)Linux系統上的標準庫。我可能會向Artifactory添加libgfortran.so的副本,並讓Apache Ivy將其拉入,但似乎如果可能的話使用標準版本會更有意義。如果系統中不存在ant resolve命令,有沒有一種方法可以通過常規維護來實現?如何引入標準庫的意外構建依賴關係

另一種解決方案可能是在編譯系統中靜態鏈接libgfortran.a,但我試圖通過加入-static RELATIVE_PATH_TO_LIBS/libgfortran.a編譯並鏈接好,但是在缺少庫的系統上運行上述程序時仍然出錯。

謝謝你提供的任何幫助。

回答

1

如果可執行文件格式是「ELF」文件格式(在Linux系統默認),可以使用「readelf」,顯示可執行文件的動態部分:

readelf -d my_executable_file 

它應該包含列表所有共享庫都需要。這是檢查可執行文件是否仍然需要此庫的可能性。

如果「libgfortran.so」的問題和「libgfortran.a」可我會重新命名「libgfortran.a」到「libxxxx.a」,並使用鏈接器開關:

-Lpath_containing_libxxxx.a -lxxxx 

代替「-lgfortran」。我不會使用「-static」開關,因爲在這種情況下,鏈接器也會嘗試靜態鏈接所有其他庫。鏈接器應該自動鏈接「-lxxxx」,因爲沒有這個名稱的動態庫可用。