gpt4 book ai didi

c++ - Linux gcc 4.3.4 上的链接错误 : "undefined reference" related to "jpeg" library (e. g.,未定义对 `jpeg_std_error(jpeg_error_mgr*)' 的引用)

转载 作者:太空狗 更新时间:2023-10-29 11:33:07 25 4
gpt4 key购买 nike

我正在处理已经开发了几年的大型 C++ 代码。我已添加到代码中并已在 Mac OX 10.7.5 上成功运行。但是,它非常慢,我现在想在集群上运行它 (g++ (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973])。就 C++ 而言,我不是很有经验,就处理编译/链接而言,我是一个完全的新手。

我无法解决与“jpeg”库相关的链接错误,非常感谢您的帮助。我将库代码安装在我的代码所在的目录中,但我的理解是它也可以从编译器获得。

错误输出较多,就不全部贴出来了。这是第一部分:

/data/place/number/account/program/libraries/libfile_intel.a(Grid.o): In function program::Grid<double>::SaveToJPG(char const*,
int, bool, bool) const':
Grid.cpp:(.text._ZNK3program20GridIdE9SaveToJPGEPKcibb[program::Grid<double>::SaveToJPG(char
const*, int, bool, bool) const]+0x499): undefined reference to
jpeg_std_error(jpeg_error_mgr*)' Grid.cpp:(.text._ZNK3program20GridIdE9SaveToJPGEPKcibb[program::Grid::SaveToJPG(char const*, int, bool, bool) const]+0x4b5): undefined reference to `jpeg_CreateCompress(jpeg_compress_struct*, int, unsigned long)'

我尝试过的:

  • 当我在 Google 中搜索这个问题时,我从一篇旧的论坛帖子中发现 jpeg 库是用 C 编译的。这显然会导致 C++ 编译器弄乱名称。我不清楚这意味着什么,但我按照建议添加:

extern "C" {
#include "jpeglib.h" }

在我的 jpeg 目录中包含“#include “jpeglib.h”的所有文件中。我写了“jpeglib.h”,因为正如我提到的,我有一个包含 jpeg 代码的目录。但是,我做了也尝试使用默认提供的 jpeg 代码,我收到一条消息说它在集群编译器上不可用。

  • 在我的 makefile 中,我检查了所有的包含和路径。这些似乎都不是问题。此外,我在其他目录中有类似的路径和其他库的包含,它们很好。

  • 我还添加了:-lstdc++ 到我的编译器选项列表(来自另一篇旧论坛帖子的建议)。它的影响为零。

我所做的一个奇怪的观察是,当我“制作”整个代码(不同目录中的几个库)时,jpeg 库不会制作,除非我专门进入它的目录并在那里“制作”。正如我所说,代码太大而无法发布它来证明我没有路径错误。我很确定我没有,但这种行为看起来很奇怪。

如果有人在这篇长篇文章后仍然和我在一起,我将非常感谢任何提示。谢谢。

编辑:在我的 makefile 中,这是我用于编译/链接的内容:

CC = g++

OPTIONS = -O3 -fpermissive -w -DSAMG_UNIX_LINUX -DSAMG_LCASE_USCORE -DNDEBUG -DCSP_WITH_SAMG_SOLVER

编辑 2:Svens 建议的结果

我做了:

find /usr /opt -iname libjpeg*so*

得到:

/usr/lib/libjpeg.so.62

/usr/lib/libjpeg.so.62.0.0

/usr/lib64/libjpeg.so.62

/usr/lib64/libjpeg.so.62.0.0

/usr/lib64/libjpeg.so find:

/usr/lib64/mozilla': Permission denied find:
/usr/lpp/mmfs/gui/runtime': Permission denied me@login1:/data/place/number/account/program/support_libraries/jpeg> cd ../../libraries/ me@login1:/data/place/number/account/program/libraries> find $HOME -iname libjpeg*so*

如果我的理解是正确的,该库存在并且已经在我期望的“库”目录中找到。我链接所有库的主 makefile 有一个指向 jpeg 库所在目录的包含路径。找到该目录中的其他库。 “权限被拒绝”在做什么?

编辑 3:Sven 建议更改 makefile 选项的结果:

这是我改变的:

  • 首先将“-lgems3k -L/usr/lib -ljpeg”添加到我的 LIBS(库)中。这会导致以下错误。
  • 然后添加(导致与原始错误相同的错误):选项 = -O3 -fpermissive -w -DSAMG_UNIX_LINUX -DSAMG_LCASE_USCORE -DNDEBUG -DCSP_WITH_SAMG_SOLVER -/usr/lib/libjpeg.so.62

-L/usr/lib -ljpeg /usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:

skipping incompatible /usr/lib/libm.so when searching for -lm

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:

skipping incompatible /usr/lib/libm.a when searching for -lm

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:

skipping incompatible /usr/lib/libc.so when searching for -lc

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:

skipping incompatible /usr/lib/libc.a when searching for -lc

/data/place/number/account/program/libraries/lib1_intel.a(Grid.o): In

function `program::Grid::SaveToJPG(char const*, int, bool, bool) const':

Grid.cpp:(.text._ZNK3program20GridIdE9SaveToJPGEPKcibb[program::Grid::SaveToJPG(char const*, int, bool, bool) const]+0x499): undefined reference to `jpeg_std_error(jpeg_error_mgr*)'

等等……

最佳答案

跟进评论:你确定你安装了 libjpeg 吗?运行

find $HOME -iname libjpeg\*so\*

找到您需要链接到的 libjpeg。此命令很可能会产生多个结果。

您可以简单地获取此输出的第一行并将其附加到您的编译命令,但不要使用上面建议的“-ljpeg”。

如果它根本没有给出任何输出,则说明您的家中没有安装 libjpeg。所以要么

  • 安装 libjpeg

  • 如果您也不需要它,请禁用需要它的代码部分

  • 扩展您的搜索,

喜欢

find /usr /opt -iname libjpeg\*so\*

...并尝试在系统上安装 libjpeg 之一。

编辑(在系统上找到 libjpeg 之后):

尝试追加

/usr/lib/libjpeg.so.62

编译命令(Makefile 中的 OPTIONS 变量)。如果这不起作用,请尝试

-L/usr/lib -ljpeg

(由 Mats 编辑:)

还要确保 #include "jpeglib.h" 的每个地方都被 extern "C"{ ... } 覆盖。用 c++ 包装器 include 替换它们可能是有意义的,它在一个地方添加 extern "C"{ ... } ,然后只在相关的文件中包含“wrapped_jpeglib.h”地方。

(Mats 结束编辑)

关于c++ - Linux gcc 4.3.4 上的链接错误 : "undefined reference" related to "jpeg" library (e. g.,未定义对 `jpeg_std_error(jpeg_error_mgr*)' 的引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com