關於FreeImage的linux版本編譯

2021-07-23 17:52:23 字數 3431 閱讀 3404

最近在搞opencl在fpga上的程式設計,所以要處理影象,還是要靠freeimage庫。從官網來看,只提供了windows版本的動態和靜態庫。由於我的altera cyclone v(de1soc)板需要執行的是linux庫,無奈只好自己編譯了。

source/librawlite/./internal/dcraw_common.cpp: 在成員函式『void libraw::vng_interpolate()』中:

source/librawlite/./internal/dcraw_common.cpp:4546:3: 錯誤:在 {} 內將『128』從『int』轉換為較窄的型別『signed char』 [-wnarrowing]};^

source/librawlite/./internal/dcraw_common.cpp:4546:3: 錯誤:在 {} 內將『136』從『int』轉換為較窄的型別『signed char』 [-wnarrowing]

source/librawlite/./internal/dcraw_common.cpp:4546:3: 錯誤:在 {} 內將『128』從『int』轉換為較窄的型別『signed char』 [-wnarrowing]

source/librawlite/./internal/dcraw_common.cpp:4546:3: 錯誤:在 {} 內將『136』從『int』轉換為較窄的型別『signed char』 [-wnarrowing]

source/librawlite/./internal/dcraw_common.cpp:4546:3: 錯誤:在 {} 內將『128』從『int』轉換為較窄的型別『signed char』 [-wnarrowing]

source/librawlite/./internal/dcraw_common.cpp:4546:3: 錯誤:在 {} 內將『136』從『int』轉換為較窄的型別『signed char』 [-wnarrowing]

我們把有問題的這段**摘出來,可以看到{}中以十六進製制表示的數字,有的是超過127的,因為字面整數預設是int型別,所以這裡會出現這個錯誤。

void class vng_interpolate()

, chood = ;

將上面的**改為下面的形式即可

void class vng_interpolate()

, chood = ;

(2) c++11的原始字串與巨集定義r產生的錯誤

這個錯誤是因為你的編譯器支援的是c++ 11的標準,c++11中引入了原始字串的新特性,使用r」「等方式來定義乙個不進行轉義的字串。而在freeimage的一些**中,使用了r作為一些巨集函式的引數,導致一些場合會將其當做是乙個原始字串。

先來看一下報錯資訊

source/libwebp/./src/dsp/dsp.upsampling_mips_dsp_r2.c:37:34: 錯誤:原始字串分隔符中有無效字元『 』

"shll_s.w %["

#r"], %["

#r"], 9 \n\t" \

^

source/libwebp/./src/dsp/dsp.upsampling_mips_dsp_r2.c:37:48: 錯誤:原始字串分隔符中有無效字元『 』

"shll_s.w %["

#r"], %["

#r"], 9 \n\t" \

^

source/libwebp/./src/dsp/dsp.upsampling_mips_dsp_r2.c:40:34: 錯誤:原始字串分隔符中有無效字元『 』

"precrqu_s.qb.ph %["

#r"], %["

#r"], $zero \n\t" \

^

source/libwebp/./src/dsp/dsp.upsampling_mips_dsp_r2.c:40:48: 錯誤:原始字串分隔符中有無效字元『 』

"precrqu_s.qb.ph %["

#r"], %["

#r"], $zero \n\t" \

^

source/libwebp/./src/dsp/dsp.upsampling_mips_dsp_r2.c:43:34: 錯誤:原始字串分隔符中有無效字元『 』

"srl %["

#r"], %["

#r"], 24 \n\t" \

^

source/libwebp/./src/dsp/dsp.upsampling_mips_dsp_r2.c:43:48: 錯誤:原始字串分隔符中有無效字元『 』

"srl %["

#r"], %["

#r"], 24 \n\t" \

報錯的檔案是dsp.upsampling_mips_dsp_r2.c。這是乙個.c的檔案,使用gcc編譯也會出現這個錯誤。報錯的**如下(dsp.upsampling_mips_dsp_r2.c 22-49)

#if !defined(webp_yuv_use_table)

#define yuv_to_rgb(y, u, v, r, g, b) do while (0)

上面**中的第16行起,有多處是r」],的形式。這裡編譯器會將其當做乙個原始字串,從而導致錯誤。做如下修改,將所有的r都使用red替代。

#if !defined(webp_yuv_use_table)

#define yuv_to_rgb(y, u, v, red, g, b) do while (0)

這個錯誤還會出現在source/libwebp/./src/dsp/dsp.yuv_mips_dsp_r2.c檔案中,修改的方式是一樣的。

(3)tmpnam與mkstemp的選擇

這並不是乙個錯誤,只是乙個警告。

source/libjxr/./image/encode/strenc.o:在函式『strioencinit』中:

strenc.c:(.text+0x17cc): 警告: the use of `tmpnam' is dangerous, better use `mkstemp'

tmpnam函式是危險的,建議使用mkstemp。原因是mkstemp呼叫完成後,就已經生成並開啟了乙個臨時檔案,而tmpnam只是生成了乙個臨時檔案的檔名,並沒有建立檔案,不能保證其一定不存在!!!

這裡就不做修改了。

LIN匯流排的學習

lin 是 local interconnect network 的縮寫,是基於 uart sci,通用非同步收發器 序列通訊介面 的低成本序列通訊協議。可用於汽車 家電 辦公裝置等多種領域。作為乙個低成本的輔助匯流排,lin匯流排在汽車電子中應用廣泛,車門 車窗 車燈以及中控鎖等低速應用都使用li...

l常用的命令lin

cat 檢視檔案內容 cat 路徑 檔名 檔案的行數超過一屏,則顯示最後一屏 cat n 標記檔案的行數 tac 檔案倒著顯示 more 會分頁顯示檔案內容 不可向上分頁,可以向下分頁 f 空格 向下分頁 enter 回車 顯示下一行 q或者q 退出 less pgup向上翻頁 pgdn向下翻頁 搜...

汽車上的LIN通訊(一)

2 lin的目標 為現有的汽車網路can提供輔助功能 在不需要can匯流排的頻寬和多功能的場合使用,降低成本 將開關 執行元件和感測器從子匯流排連線到主匯流排 can 3 lin 匯流排應用廣泛的原因 目前,高 低速can和j1850匯流排已經成為標準的車用網路匯流排,這些匯流排速度極高,具有高抗電...