Ubuntu 上的 Libjpeg 9b 静态库:JPEG 参数结构不匹配

Libjpeg 9b static lib on Ubuntu: JPEG parameter struct mismatch

我在我的 JNI 代码中使用 libjpeg ver.9b(静态库)。我已经成功编译了所有内容并得到了它 运行,直到我接触到 jpeg 部分。控制台显示:

JPEG parameter struct mismatch: library thinks size is 664, caller expects 632

我四处搜索,发现大多数人指向重复的共享库。我想我可以排除这种情况,因为我已经卸载了机器上的所有 libjpeg 库(没有 libjpeg.so 剩余)并将其静态链接到我的代码中。 libjpeg 库是在 Compiling libjpeg 之后并使用 CFLAGS="-O3 -fPIC" 在同一台机器上构建的。知道问题出在哪里以及我应该如何解决它吗?

听起来系统中可能还有一些 headers 其他版本的库。您是通过使用打包系统删除软件包来卸载以前的库,还是只是手动删除库? (那么 headers 可能仍保留在系统中 - 通常在 /usr/include/usr/local/include 中)

在您的 other question 中,我看不到您会在命令行上明确提供 JPEG 库的路径。因此,除非您在构建后将库安装到默认位置,否则请尝试通过 -I /path/to/correct_jpeg_headers.

显式传递包含路径

您也可以尝试找到另一个 headers 的位置,例如使用:

find /usr -name "jpeglib.h"

请注意,即使您 link 使用静态库,仍然有可能静态库是使用与客户端使用的 headers 不同的方式构建的,因此仍然可能存在结构不匹配(违反 ODR),尽管它可能 link 成功。