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

我无法解决与“jpeg”库相关的链接错误,非常感谢您的帮助。我将库代码安装在我的代码所在的目录中,但据我了解,编译器也可以使用该代码。

错误输出很多,所以我不会全部发布。这是第一部分:



我试过的

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



  • 在我的jpeg目录中包含“#include” jpeglib.h。”的所有文件中,我写了“jpeglib.h”是因为如上所述,我有一个包含jpeg代码的目录。但是,我也确实尝试过使用默认提供的jpeg代码,我收到一条消息,说它在群集编译器上不可用。
  • 在我的makefile中,我已经检查了所有包含和路径。这些似乎不是问题。另外,我有类似的路径,并且包含其他目录中的其他库,它们很好。
  • 我还添加了:-lstdc++到我的编译器选项列表中(来自另一篇旧论坛文章的建议)。效果为零。

  • 我所作的一种奇怪的观察是,当我对整个代码(各个目录中的几个库)进行“制作”时,除非我专门进入其目录并在其中进行“制作”,否则jpeg库不会制作。就像我说的那样,代码太大了,无法发布它来证明我没有路径错误。我敢肯定我不会,但是这种行为似乎很奇怪。

    如果在这篇漫长的帖子之后仍然有人在我身边,我将不胜感激。谢谢。

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



    编辑2:斯文斯的建议的结果

    我做了:



    并得到:



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

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

    这是我更改的内容:
  • 首先在我的LIBS(库)中添加了“-lgems3k -L/usr/lib -ljpeg”。这导致以下错误。
  • 然后添加(导致与原始错误相同):
    选项= -O3-允许-w -DSAMG_UNIX_LINUX -DSAMG_LCASE_USCORE -DNDEBUG -DCSP_WITH_SAMG_SOLVER-/usr/lib/libjpeg.so.62



  • 等等...

    最佳答案

    跟进评论:您确定安装了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++ wrapper include替换它们可能是有意义的,它在一个位置添加extern "C" { ... },然后在相关位置仅包含“wrapped_jpeglib.h”。

    (由Mats编辑)

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

    10-10 18:57