我正在使用几年来开发的大型 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): 在函数
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)'
我试过的:
- 当我在谷歌上搜索这个问题时,我从一个旧论坛帖子中发现 jpeg 库是用 C 编译的。这显然会导致 C++ 编译器混淆名称。我不清楚这意味着什么,但我按照建议添加:
外部“C”{
#include“jpeglib.h”}
在我的 jpeg 目录中包含“#include”jpeglib.h“的所有文件中。我写了”jpeglib.h“因为,正如我提到的,我有一个包含 jpeg 代码的目录。但是,我也尝试使用默认提供的 jpeg 代码,我收到一条消息说它在集群编译器上不可用。
在我的 makefile 中,我检查了所有的包含和路径。这些似乎都不是问题。此外,我有类似的路径,并包含其他目录中的其他库,它们很好。
我还在我的编译器选项列表中添加了:-lstdc++(来自另一个旧论坛帖子的建议)。它的影响为零。
我所做的一个奇怪的观察是,当我对整个代码(不同目录中的几个库)进行“制作”时,除非我专门进入它的目录并在那里“制作”,否则 jpeg 库不会制作。正如我所说,代码太大,无法发布以证明我没有路径错误。我很确定我没有,但这种行为似乎很奇怪。
如果在这篇长篇文章之后有人仍然和我在一起,我将非常感谢任何提示。谢谢。
编辑:在我的makefile中,这是我用于编译/链接的内容:
CC = g++
选项 = -O3 -fpermissive -w -DSAMG_UNIX_LINUX -DSAMG_LCASE_USCORE -DNDEBUG -DCSP_WITH_SAMG_SOLVER
编辑 2:斯文斯建议的结果
我做了:
查找 /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 找到:
/usr/lib64/mozilla': Permission denied find:
/usr/lpp/mmfs/gui/runtime':权限被拒绝 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*
如果我的理解是正确的,那么该库存在并且已在我期望的“库”目录中找到。我链接所有库的主生成文件具有指向 jpeg 库所在目录的包含路径。找到该目录中的其他库。“权限被拒绝”在做什么?
编辑 3:Sven 建议更改生成文件选项的结果:
这是我更改的内容:
- 首先将“-lgems3k -L/usr/lib -ljpeg”添加到我的 LIBS(库)中。这会导致以下错误。
- 然后添加(导致与原始错误相同): OPTIONS = -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:
搜索 -lm 时跳过不兼容的 /usr/lib/libm.so
/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:
搜索 -lm 时跳过不兼容的 /usr/lib/libm.a
/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:
搜索 -lc 时跳过不兼容的 /usr/lib/libc.so
/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld:
搜索 -lc 时跳过不兼容的 /usr/lib/libc.a
/data/place/number/account/program/libraries/lib1_intel.a(Grid.o):在
函数`program::Grid::SaveToJPG(char const*, int, bool, bool) const':
Grid.cpp:(.text._ZNK3program20GridIdE9SaveToJPGEPKcibb[program::Grid::SaveToJPG(char const*, int, bool, bool) const]+0x499): 未定义引用`jpeg_std_error(jpeg_error_mgr*)'
等等...