我正在使用已经开发了几年的大型C++代码。我已经添加了代码,并且已经在Mac OX 10.7.5上成功运行了它。但是,它非常慢,我现在想在群集上运行它(g++(SUSE Linux)4.3.4 [gcc-4_3-branch修订版152973])。就C++而言,我不是很有经验,就编译/链接而言,我是一个完全的新手。
我无法解决与“jpeg”库相关的链接错误,非常感谢您的帮助。我将库代码安装在我的代码所在的目录中,但据我了解,编译器也可以使用该代码。
错误输出很多,所以我不会全部发布。这是第一部分:
我试过的
在我的jpeg目录中包含“#include” jpeglib.h。”的所有文件中,我写了“jpeglib.h”是因为如上所述,我有一个包含jpeg代码的目录。但是,我也确实尝试过使用默认提供的jpeg代码,我收到一条消息,说它在群集编译器上不可用。
我所作的一种奇怪的观察是,当我对整个代码(各个目录中的几个库)进行“制作”时,除非我专门进入其目录并在其中进行“制作”,否则jpeg库不会制作。就像我说的那样,代码太大了,无法发布它来证明我没有路径错误。我敢肯定我不会,但是这种行为似乎很奇怪。
如果在这篇漫长的帖子之后仍然有人在我身边,我将不胜感激。谢谢。
编辑:
在我的makefile中,这是我用于编译/链接的内容:
编辑2:斯文斯的建议的结果
我做了:
并得到:
如果我的理解是正确的,则该库存在并且可以在我期望的“库”目录中找到。连接所有库的主makefile包含一个指向jpeg库所在目录的包含路径。在该目录中找到其他库。 “拒绝权限”在做什么?
编辑3:Sven建议更改makefile选项的结果:
这是我更改的内容:
选项= -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。所以要么
喜欢
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/