'用g ++编译时'未定义引用'

时间:2014-01-12 23:15:30

标签: c++ c linux gcc arm

我正在尝试将我的程序与libjpeg链接。

arm-mandriva-linux-gnueabi-g ++ v4l2grab2.cpp -o v4l2grab -Wall -Llib -ljpeg

错误:

v4l2grab2.cpp:(.text+0xa28): undefined reference to `jpeg_std_error(jpeg_error_mgr*)'
v4l2grab2.cpp:(.text+0xa44): undefined reference to `jpeg_CreateCompress(jpeg_compress_struct*, int, unsigned int)'
v4l2grab2.cpp:(.text+0xa54): undefined reference to `jpeg_stdio_dest(jpeg_compress_struct*, _IO_FILE*)'
v4l2grab2.cpp:(.text+0xa88): undefined reference to `jpeg_set_defaults(jpeg_compress_struct*)'
v4l2grab2.cpp:(.text+0xaa4): undefined reference to `jpeg_set_quality(jpeg_compress_struct*, int, int)'
v4l2grab2.cpp:(.text+0xab4): undefined reference to `jpeg_start_compress(jpeg_compress_struct*, int)'
v4l2grab2.cpp:(.text+0xaf0): undefined reference to `jpeg_write_scanlines(jpeg_compress_struct*, unsigned char**, unsigned int)'
v4l2grab2.cpp:(.text+0xb1c): undefined reference to `jpeg_finish_compress(jpeg_compress_struct*)'
v4l2grab2.cpp:(.text+0xb28): undefined reference to `jpeg_destroy_compress(jpeg_compress_struct*)'

但是,当我将文件重命名为 *。c 并尝试使用 arm-mandriva-linux-gnueabi-gcc (而不是g ++)编译时,所有内容< STRONG>工作!

我真的需要在C ++代码中使用它。 如何使用 g ++ 编译此代码?

1 个答案:

答案 0 :(得分:5)

似乎你包含了一个没有C ++支持的C头。尝试在extern "C"块中包含相关标头:

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

(因为你没有发布任何代码,我不确定你试图包含哪个标题,只是猜到了<jpeglib.h>)。

如果你需要从一个标题中加入<jpeglib.h>,这个标题也应该可以包含在C中,你可以用C ++测试来包装它:

#ifdef __cplusplus
extern "C" {
#endif
#include <jpeglib.h>
#ifdef __cplusplus
}
#endif