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

C++ Ubuntu上的Libjpeg 9b静态库:JPEG参数结构不匹配,c++,libjpeg,C++,Libjpeg,我在JNI代码中使用的是libjpeg ver.9b(静态库)。我已经成功地编译了所有内容并使其运行,直到我接触到jpeg部分。控制台显示: JPEG parameter struct mismatch: library thinks size is 664, caller expects 632 我四处搜索,发现大多数人都指向重复的共享库。我想我可能会排除这种可能性,因为我已经卸载了机器上的所有libjpeg库(没有libjpeg.so剩余),并将其静态链接到我的代码中。libjpeg库是在

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

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

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

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

在您的示例中,我看不出您会在命令行上显式地提供指向JPEG库的路径。因此,除非您在构建库后将其安装到默认位置,否则请尝试通过
-I/path/to/correct\u jpeg\u头显式传递包含路径

您还可以尝试查找其他标题的位置,例如,使用:

find /usr -name "jpeglib.h"

请注意,即使您链接到静态库,静态库仍然可能是使用与客户端使用的头不同的头构建的,因此仍然可能存在结构不匹配(ODR冲突)尽管它可能链接成功。

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

在您的示例中,我看不出您会在命令行上显式地提供指向JPEG库的路径。因此,除非您在构建库后将其安装到默认位置,否则请尝试通过
-I/path/to/correct\u jpeg\u头显式传递包含路径

您还可以尝试查找其他标题的位置,例如,使用:

find /usr -name "jpeglib.h"

请注意,即使您链接到静态库,静态库仍然可能是使用不同于客户端使用的头构建的,因此尽管它可能链接成功,但仍然可能存在结构不匹配(ODR冲突)。

谢谢。事实证明,我确实使用了不同的标题,尽管它们都是Vr.9b。在编译libjpeg库时,我使用了通过运行整个过程(使用configure->make->makeinstall)生成的集合,然后直接使用下载的源代码(make之前)中的头作为参考。谢谢。事实证明,我确实使用了不同的标题,尽管它们都是Vr.9b。在编译libjpeg库时,我使用了通过运行整个过程(使用configure->make->makeinstall)生成的集合,然后直接使用下载的源代码(make之前)中的头作为参考。