QT 搭配 Libjpeg 的問題
QT 是走 C++ 編譯,所以 只要是 C++編譯環境下使用 libjpeg.lib函數庫 都會有相同的問題。
由於 libjpeg 是用 C 語言寫的所以,記住一定要用extern包裝起來整個編譯預處理文件,否則在編譯連接的時候就會產生一大堆的link error...。
例如: 以下是 QT 搭配 libjpeg 編譯時,產生的錯誤訊息...
QT 是走 C++ 編譯,所以 只要是 C++編譯環境下使用 libjpeg.lib函數庫 都會有相同的問題。
由於 libjpeg 是用 C 語言寫的所以,記住一定要用extern包裝起來整個編譯預處理文件,否則在編譯連接的時候就會產生一大堆的link error...。
例如: 以下是 QT 搭配 libjpeg 編譯時,產生的錯誤訊息...
webcamera_api.o(.text+0x14): In function `write_JPEG_file(char*, int)":
: undefined reference to `jpeg_std_error" webcamera_api.o(.text+0x2c): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_CreateCompress" webcamera_api.o(.text+0x4c): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_stdio_dest" webcamera_api.o(.text+0x8c): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_set_defaults" webcamera_api.o(.text+0x9c): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_set_quality" webcamera_api.o(.text+0xa8): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_start_compress" webcamera_api.o(.text+0xec): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_write_scanlines" webcamera_api.o(.text+0x104): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_finish_compress" webcamera_api.o(.text+0x114): In function `write_JPEG_file(char*, int)": : undefined reference to `jpeg_destroy_compress" |
解法: 在自己的 C++ 應用程序,在需要引用函數庫 #include的地方加入
extern "C"
{
#include "jpeglib.h"
}
另一個例子:
其中 testcamera_2_fb.c 在 GCC 下已經正常編譯且執行正確無誤!!
命令: arm-linux-gcc -o testcamera_2_fb testcamera_2_fb.c -ljpeg
現在把 testcamera_2_fb.c 複製成 t1.cpp 並用 G++ 編譯,會發生錯誤。
只要修正 #include 敘述,即可用 G++ 編譯成功。
命令: arm-linux-g++ -o t1 t1.cpp -ljpeg
下面程式碼內容完全相同,一個採用 GCC 編譯、另一個採用 G++ 編譯
PS1: 以上範例在編繹測試之前,就已經完成 libjpeg 函數庫的安裝。
PS2: 編譯前,記得加上 -ljpeg 參數。
PS3: 為什麼 png lib 不需要這樣呢? libpng 自己應該已加了有關的 extern "c" 了.
沒有留言:
張貼留言