網上下了個據說說能夠在linux編譯通過的cximage源碼包,但是拿來編譯卻遇到幾個問題:
1.必須編譯全部8個子目錄
CxImage j2k jasper jbig jpeg png tiff zlib
產生8個靜態庫。缺一不可。
原來的makefile只產生了五個lib
將原有makefile的SUBDIRS = zlib jpeg tiff png CxImage
修改為:
SUBDIRS = zlib jpeg tiff png CxImage j2k jasper jbig
或者手工進入到子目錄下一個一個單獨的make也可以。效果等同。
2.產生libjasper.a時編譯檔案jpc_cs.c出錯,提示未定義的ulong
很奇怪。需手工在檔案jpc_cs.h中加入定義語句:
#ifndef ulong
typedef unsigned long ulong;
#endif
3.寫了個極簡單的測試程式demo,把8個lib都加入了,命令如下:
gcc -o demo demo.o -L ../build-linux -l CxImage -l j2k -l jpeg -l jbig -l tiff -l png -l zlib -l jasper
提示了一大堆錯誤(提示錯誤資訊全是亂碼,看不懂,暈死了..猜測是找不到lib裡面使用的東西),諸如此類:
../build-linux/libCxImage.a(ximapcx.o):ximapcx.cpp:(.text+0xa25)錛氬鈥榑__cxa_allocate_exception鈥欐湭瀹氫箟鐨勫紩鐢
用了一堆亂碼去google,竟然還搜到了東西。找到一個說是要加-lstdc++
試了一下,可行。
(google出來的東西: 在gcc中不包含glibc和stdc++,如果使用了c或c++中的東東,
在link的時候,就要加上相應的庫glibc or stdc++。如果沒有,就要自己編譯。)
4.把例子搞複雜點,加入了讀取轉換。串連出錯:
../build-linux/libjasper.a(jpg_enc.o)
../build-linux/libjasper.a(jpg_dec.o)
具體錯誤也看不清楚,亂碼,只曉得是串連錯誤。很奇怪。
把兩個檔案的o檔案拷貝到demo目錄下,產生時手工加入:
gcc -o demo demo.o jpg_enc.o jpg_dec.o -L ../build-linux -l CxImage -l j2k -l jpeg -l jbig -l tiff -l png -l zlib -l jasper -lstdc++
編譯通過。運行無誤。
太多的不明白不明了。linux太磋了。慢慢適應~~~
最近找的幾個自動產生makefile的串連:
輕輕鬆鬆產生 Makefile
http://bbs.chinaunix.net/viewthread.php?tid=52375&extra=page%3D13%26amp%3Bfilter%3Ddigest
學習使用autotools
http://bbs.chinaunix.net/viewthread.php?tid=727270&extra=page%3D2%26amp%3Bfilter%3Ddigest
Autoconf/Automake工具組簡介
http://book.51cto.com/art/200811/97013.htm