jpeg-8d 库的链接(或正确安装和链接)

Linking (or proper installation and linking) of jpeg-8d library

提问人:Raff89 提问时间:10/29/2012 最后编辑:Jonathan LefflerRaff89 更新时间:1/10/2013 访问量:1077

问:

我的项目需要JPEG处理功能,所以我决定使用jpeg-8d库,在下载了我通常使用的包后。 返回没有错误,并且在整个过程中没有报告任何问题,但是当我在代码块 10.05 中打开编译失败时。我已经“谷歌搜索”了一些解决方案并添加了./configure; make and make installmake testexample.c

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

在文件中,重新编译,然后将这些行添加到代码块的链接器部分:还将相应的目录添加到目录部分。 但是编译器仍然无法编译example.c,以下是一些错误:jpeglib.h/usr/local/lib/libjpeg.a/usr/local/lib/libjpeg.so

> /home/raff/CodeBlocks/jpeg-8d/example.c|116|warning: incompatible implicit declaration of built-in function ‘exit’|
> example.c|| undefined reference to 'image_width'
> example.c|| undefined reference to 'image_height'

如果有人成功安装并使用了 jpeg 库,请帮忙,我在切换 IDE 和/或 linux 发行版方面没有问题。

C++ JPEG 静态库 libjpeg

评论


答:

0赞 Al W 10/29/2012 #1
  1. 您是与静态库还是共享库链接?
  2. 如果它是静态的,您是否将其放在链接器命令行中的对象文件之后
  3. 如果它是共享的,并且您使用的是较新的工具链,这也可能是问题所在。
  4. 如果链接正确,readelf -s 在共享库上显示什么?nm 在静态库上显示什么?
1赞 v154c1 10/29/2012 #2

您对库的安装似乎很好(否则它会抱怨在编译过程中丢失)jpeglib.h

该文件应该是文档的一部分,而不是您可以编译和使用的代码。请注意,例如,没有 。您应该将其用作有关如何编写用于压缩和解压缩 jpeg 文件的方法的参考。example.cmain()

变量 和 (和 ) 被声明为 ,因此假定它们在某个其他文件中定义。您可以编写程序来定义这些变量并填充缓冲区,然后才能使用提供的方法 ( 和 )。image_widthimage_heightimage_bufferexternwrite_JPEG_fileread_JPEG_file

0赞 Raff89 10/31/2012 #3

我非常确定example.c实际上是使用这个库的一个例子,所以我没有检查它的内容。此外,还有一些问题。 编写正确的程序后,我遇到了一个错误:

error while loading shared libraries libjpeg.so.8: cannot open shared object file: No such file or directory

但这已通过以下一对 shell 命令修复:

ranlib /usr/local/lib/libjpeg.a
ldconfig /usr/local/lib

希望这会有所帮助。