CxImage类是一个优秀的图像操作类库。它可以快捷地存取、显示、转换各种图像。相比于OpenIL,FreeImage,PaintLib等其他图像处理库,CxImage类库是完全免费、开源的。另外这是一个典型的MFC风格C++类库,估计最早就是在MFC上开发的吧,后续才移植到Linux上。

最近项目需要,以前在Windows客户端上用Cximage进行的图片处理,要移植到Linux服务端,因此尝试在Linux上编译和使用Cximage。中间遇到不少问题,特记录如下。

1、 下载Linux的cximage tar包

cximage 主页

http://www.xdp.it/cximage.htm

Linux 包下载地址

http://www.xdp.it/cgi-bin/dl.pl?cximage/cximage599c_tar

2、下载后得到cximage599c_tar.zip,然后将其解压

unzip cximage599c_tar.zip

tar xzvf cximage599c.tar.gz

cd cximage599c/

3、

./configure; make

其中make时报错:

cd . && /home/zhl/cximage599c/admin/missing aclocal-1.4

WARNING: `aclocal-1.4' is needed, and you do not seem to have it handy on your

system. You might have modified some files without having the

proper tools for further handling them. Check the `README' file,

it often tells you about the needed prerequirements for installing

this package. You may also peek at any GNU archive site, in case

some other package would contain this missing `aclocal-1.4' program.

make: *** [aclocal.m4] Error 1

系统有安装高版本的automake,难道一定要切换到低版本?

rpm -aq | grep automake

automake-1.13.4-3.el7.noarch

尝试手动修改Makefile里面aclocal的版本号,仍然有问题。最后发现重新生成 aclocal.m4和Makefile就可以了:

解决步骤如下:

#重新生成 aclocal.m4

aclocal

#重新生成configure文件

autoconf -i -v -f

# 删除原来的makefile

find ./ -name Makefile -exec rm -rf {} \;

# 重新生成Makefile

./configure

4、

解决后重新make,编译报其他错:

mv -f .deps/ximajbg.Tpo .deps/ximajbg.Po

g++ -DHAVE_CONFIG_H -I. -I../.. -MT ximajas.o -MD -MP -MF .deps/ximajas.Tpo -c -o ximajas.o ximajas.cpp

In file included from ximajas.h:19:0,

from ximajas.cpp:8:

../jasper/include/jasper/jasper.h:114:31: fatal error: jasper/jas_config.h: No such file or directory

#include

估计是头文件路径设置的不完整,重新configure,添加头文件路径:

# 删除原来的 Makefile

find ./ -name Makefile -exec rm -rf {} \;

# 添加--with-extra-includes指定头文件路径,重新生成Makefile

./configure --with-extra-includes=/home/cximage599c/cximage/jasper/include/

之后可以在 cximage/jasper/Makefile 中看到添加的 include 路径。

5、 再次make clean;make ,还有错误.

mv -f .deps/ximabmp.Tpo .deps/ximabmp.Po

g++ -DHAVE_CONFIG_H -I. -I../.. -I/home/cximage599c/cximage/jasper/include/ -MT tif_xfile.o -MD -MP -MF .deps/tif_xfile.Tpo -c -o tif_xfile.o tif_xfile.cpp

tif_xfile.cpp: In function ‘TIFF* _TIFFOpenEx(CxFile*, const char*)’:

tif_xfile.cpp:102: error: cast from ‘CxFile*’ to ‘int’ loses precision

make[3]: *** [tif_xfile.o] Error 1

解决方法:修改代码 ./cximage/CxImage/tif_xfile.cpp

extern"C" TIFF* _TIFFOpenEx(CxFile* stream, constchar* mode)

{

//return (_TIFFFdOpen((int)stream, "TIFF IMAGE", mode));// 64bits 系统,int 改成long

return (_TIFFFdOpen((long)stream, "TIFF IMAGE", mode));

}

6、 最后cximage编译通过,但编译自己的程序,链接cximage相关的静态库时又提示需要-fPIC选项./usr/bin/ld: /home/xxxxx/libCxImage.a(ximatran.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC

/home/xxxxx/libCxImage.a: could not read symbols: Bad value

因此删除Makefile后,添加CPPFLAGS="=-fPIC" 选项,重新执行configure生成Makefile

CPPFLAGS="=-fPIC"  ./configure --with-extra-includes=/home/cximage599c/cximage/jasper/include/

编译步骤总结:

1、 修改 ./cximage/CxImage/tif_xfile.cpp 代码

2、 aclocal

3、 autoconf -i -v -f

4、 automake --add-mising

5、 find ./ -name Makefile -exec rm -rf {} \;

6、 CPPFLAGS="=-fPIC" ./configure --with-extra-includes=/home/cximage599c/cximage/jasper/include/

CPPFLAGS 根据实际需要添加。

7、 make; make install

linux cximage动态库,64位Linux编译cximage手记相关推荐

  1. linux内核高分辨率定时器,64位Linux上的高分辨率定时器支持

    我试图在2.6.39.1 64位Linux上启用高分辨率定时器支持.为此,我首先在.config中设置CONFIG_HIGH_RES_TIMERS=y.64位Linux上的高分辨率定时器支持 而且,g ...

  2. linux 80中断,在64位Linux上使用中断0x80

    参见英文答案 > What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code?1个 我有一个简单的64位汇编程序,用 ...

  3. linux下动态库符号表,Linux动态库(.so)符号表

    最近编译libbinder.so发现system/lib/libbinder.so只有358K,但单独编译生成的obj/SHARED_LIBRARIES/libbinder_intermediates ...

  4. windows下MinGW编译openssl库(64位、32位)图文解析

    环境:windows10 64位 工具链:MinGW64 IDE:CLion MinGW编译openssl 有两种方式获取到动态库: 一种是自己编译,编译源码 一种是在msys下安装openssl库的 ...

  5. java 位运算取8位_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译

    Java 9 引入了 aot 编译方式,能够将 class 文件直接编译成可执行二进制文件.目前 Java 9 的 early access 版本已经提供了编译工具,让我们来看看它的功能吧. 注意:按 ...

  6. found linux系统wget出现not_Java 9 AOT 试用:仅支持 64 位 Linux和java.base 模块编译

    Java 9 引入了 aot 编译方式,能够将 class 文件直接编译成可执行二进制文件.目前 Java 9 的 early access 版本已经提供了编译工具,让我们来看看它的功能吧. 注意:按 ...

  7. linux上运行gfortran,linux – gfortran:在64位系统中编译32位可执行文件

    我在AMD Athlon(tm)64 X2双核处理器5200×2上运行Ubuntu 12.10(64位), Linux内核3.5.0-51通用.我有GNU Fortran(Ubuntu / Linar ...

  8. linux cmake 编译64位,cmake编译win下64位obs

    obs是一款开源编码推流工具,简单易用,非常流行. 一次项目中,发现本台式机I3处理器下32位obs推流CPU使用率100%.而使用的第三方设备在64位下,性能较好. 所以需要编译64位obs并且编译 ...

  9. 在64位linux下编译32位程序

    一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序. 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM ...

  10. linux动态库查找,Linux查找动态库的3种方法

    Linux查找动态库的3种方法 linux默认加载动态库的路径是 /lib或者是/lib64, 32位的系统是前者,64位是后者. 如果找不到还有3个地方 LD_LIBRARY_PATH rpath ...

最新文章

  1. 2022-2028年中国XPS挤塑板行业市场全景评估及产业前景规划报告
  2. int(1) 和 int(10) 有什么区别?资深开发竟然分不清!
  3. seaborn+画图+EDA
  4. OpenCV中图像显示窗口函数namedWindow()详解
  5. 配置CITRIX XML 服务与IIS 7.x共享端口
  6. Python爬取网站用户手机号_利用python爬取慕课网站上面课程
  7. 花鱼儿家的家常小菜~~~~~~丁香鱼炒花菜
  8. linux ubuntu deepin apache2 rewrite
  9. html5 ajax数据显示,html5的ajax学习(二)
  10. 【英语学习】【English L06】U04 Adventure L1 I want to watch a ballet show there
  11. 一招生成定制版二次元人脸头像,还能“模仿”你的表情!
  12. java解压zip异常_zip 文件解压缩问题解决 java.util.zip.ZipException:error in opening zip file | 学步园...
  13. windows中配置ant环境变量
  14. ZigBee-CC2530单片机 - 低功耗运行
  15. HTML CSS游戏官网网页模板——卡通的萌王游戏网页(13个页面)
  16. Uni-app 小程序 APP 的广告变现之路:插屏广告
  17. MOOS程序解析记录(6)pLogger
  18. Docker Compose容器编排
  19. 路由器配置及路由实现实验报告
  20. 95后女孩从月入3000到月入10万

热门文章

  1. Fidder实现手机抓包(ios)
  2. ThinkPHP 商城属性添加
  3. 计算机无法获取正常的ip地址,教你轻松解决Win7系统经常获取不到IP地址问题
  4. win10pe系统计算机名修改,pe 重置win10登陆密码怎么操作_如何用pe系统重置win10电脑密码-win7之家...
  5. 软件选择,iDreamPiano、freepiano、EveryonePiano
  6. js 导出Excel
  7. 解决vscode下载太慢的问题
  8. 三角波的傅里叶变换对_傅里叶变换(二) 从傅里叶级数到傅里叶变换
  9. Android模仿超级课表,展示多门课程重叠,页面有折角背景
  10. python下载安装教程