Boost在Linux下64位靜態庫的問題

2021-08-07 12:02:45 字數 714 閱讀 4991

boost作為」準」標準庫時,用動態庫進行鏈結總是有點怪怪的,你見過用個string的時候還要鏈結個動態庫嗎。於是編譯了靜態庫進行測試,發現在linux用g++進行編譯的boost靜態庫被動態庫引用的時候會報錯:

/usr/bin/ld: relocation r_x86_64_32 against `.rodata' can not be used when ****** a shared object; recompile with -fpic
上網一搜,發現boost編譯出靜態庫的時候沒有加-fpic(通常動態庫需要加這個東西,進行位址無關的處理,靜態庫不需要)。

後來在測試了一下,如果用上述的靜態庫鏈結到應用程式中是沒有問題的,但是連線到動態庫中存在問題。也難怪,除非你編乙個不帶-fpic的動態庫。乙個位址無關的.so檔案怎麼可能鏈結乙個帶有位址資訊的.a檔案呢,想想都有問題。

解決方法就是重新編譯boost:找到gcc.jam檔案,具體路徑忘記了,用find命令搜吧(find . -name 「gcc.jam」)。然後加幾個字:

|| $(link) =static
如下面的**(直接搜-fpic)

然後重新進行./bootstap.sh

然後重新編譯就ok了

Boost在Linux 64 下的編譯

wget 2.解壓 3.執行如下指令碼 function make boost function make issue echo using gcc version gcc path tools build src user config.jam make issue make boost 第一步是...

libsvm在64位linux下matlab編譯

現在寫一下在matlab中從安裝libsvm到使用。1,安裝 系統版本 redhat 6.0 matlab版本 2010b.1 首先將matlab當前目錄設為libsvm matlab所在目錄,並且保證makefile檔案中matlabdir路徑為matlab安裝所在路徑,例如 matlabdir ...

在64位linux下編譯32位程式

一般情況下我們最好是在乙個平台上編譯本平台的二進位制程式,比如在32位平台上編譯32位程式而在64位平台上編譯64位程式。現在64位的系統 這裡主要指x86 64系統,包括amd64和intel的em64t 已經開始廣泛的使用起來了,甚至於你現在要是想買32位的處理器根本就沒有。64位的系統在效能和...