C++调用C函数时报错:error LNK2019: unresolved external symbol

weiwudexin57 2013-04-27 10:56:17
最近上网下载了大牛的代码,想调试一下,结果报错
具体的情况如下
C头文件定义:
#ifdef __cplusplus
extern "C" {
#endif

#define IO_PNG_VERSION 0.20100727

/* io_png.c */
unsigned char *read_png_u8(const char *fname, size_t *nx, size_t *ny, size_t *nc);
unsigned char *read_png_u8_rgb(const char *fname, size_t *nx, size_t *ny);
unsigned char *read_png_u8_gray(const char *fname, size_t *nx, size_t *ny);
float *read_png_f32(const char *fname, size_t *nx, size_t *ny, size_t *nc);
float *read_png_f32_rgb(const char *fname, size_t *nx, size_t *ny);
float *read_png_f32_gray(const char *fname, size_t *nx, size_t *ny);
int write_png_u8(const char *fname, const unsigned char *data, size_t nx, size_t ny, size_t nc);
int write_png_f32(const char *fname, const float *data, size_t nx, size_t ny, size_t nc);

#ifdef __cplusplus
}
#endif

在主程序中直接include该文件,
#include "io_png/io_png.h"

结果报错:
1>demo_ASIFT.obj : error LNK2019: unresolved external symbol _write_png_f32 referenced in function _main
1>demo_ASIFT.obj : error LNK2019: unresolved external symbol _read_png_f32_gray referenced in function _main

看了网上的关于C++调用C需要注意的一些地方,觉得这个头文件满足了。真是百思不得其解,求高手指教!
...全文
8797 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyaoxiaonizi 2013-08-09
  • 打赏
  • 举报
回复
11楼说的不错,应该是#ifdef __cplusplus extern "C" { #endif 的问题,c文件强制使用c的方式编译,而c++文件使用c++方式编译,所以会找不到,把那一行去了试试。
lwjaiyjk3 2013-08-09
  • 打赏
  • 举报
回复
楼主问题解决了没,我也遇到这样的问题,求指导。。。。。。。
DavidYuxuan 2013-04-27
  • 打赏
  • 举报
回复
是不是定义了函数没有实现?我用你的代码试了试(我把头文件中声明的几个函数在c文件中试了一下),没问题的。
weiwudexin57 2013-04-27
  • 打赏
  • 举报
回复
引用 3 楼 Automation_dmu 的回复:
有没有大牛的io_png.c文件也添加到你的工程里呢?
额,没有。不过刚试了一下,的确是没有这个错误了。不过io_png.h中包含的其他头文件中定义的函数又报错了。 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_rows referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_channels referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_image_height referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_image_width referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_read_png referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_set_sig_bytes referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_init_io referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_create_info_struct referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_create_read_struct referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_sig_cmp referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_destroy_read_struct referenced in function _read_png_abort 1>io_png.obj : error LNK2019: unresolved external symbol _png_write_end referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_write_image referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_write_info referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_set_IHDR referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_create_write_struct referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_destroy_write_struct referenced in function _write_png_abort 1>D:\MyProject\ASif\Debug\ASif.exe : fatal error LNK1120: 17 unresolved externals 这些文件也要添加进来是吧
weiwudexin57 2013-04-27
  • 打赏
  • 举报
回复
引用 4 楼 justkk 的回复:
好像函数名字不一致 _write_png_f32 前面有一个下划线
看了一些帖子,说的是C的编译器就会把函数编译成这个形式,这也是导致无法找到函数模块的原因。
weiwudexin57 2013-04-27
  • 打赏
  • 举报
回复
引用 1 楼 justkk 的回复:
不能只包含头文件吧,那里面只是函数的原型声明 这些函数的具体定义呢??
有相应的源文件,没有lib和dll。文件比较长,可以把报错的函数定义贴出来:

float *read_png_f32(const char *fname, size_t * nx, size_t * ny, size_t * nc)
{
    /* read the image as float */
    return (float *) read_png_raw(fname, nx, ny, nc,
                                  PNG_TRANSFORM_IDENTITY, IO_PNG_F32);
}
justkk 2013-04-27
  • 打赏
  • 举报
回复
好像函数名字不一致

_write_png_f32 前面有一个下划线
AndyStevens 2013-04-27
  • 打赏
  • 举报
回复
有没有大牛的io_png.c文件也添加到你的工程里呢?
weiwudexin57 2013-04-27
  • 打赏
  • 举报
回复
有相应的源文件,不是lib和dll。文件比较长,可以把报错的函数定义贴出来:
float *read_png_f32(const char *fname, size_t * nx, size_t * ny, size_t * nc)
{
    /* read the image as float */
    return (float *) read_png_raw(fname, nx, ny, nc,
                                  PNG_TRANSFORM_IDENTITY, IO_PNG_F32);
}
justkk 2013-04-27
  • 打赏
  • 举报
回复
不能只包含头文件吧,那里面只是函数的原型声明

这些函数的具体定义呢??
Athenacle_ 2013-04-27
  • 打赏
  • 举报
回复
extern "C"
shawn 2013-04-27
  • 打赏
  • 举报
回复
link error: 1. 函数无definition 2. 没有找到库或者库中无实现
CyberLogix 2013-04-27
  • 打赏
  • 举报
回复
应该是没有连接上相应函数所在的库导致的链接错误
赵4老师 2013-04-27
  • 打赏
  • 举报
回复
VC6: 工程、设置、C/C++、分类:Preprocessor、附加包含路径:填写附加头文件所在目录 逗号间隔多项 工程、设置、Link、分类:Input、附加库路径:填写附加依赖库所在目录 分号间隔多项 工程、设置、Link、分类:Input、对象/库模块:填写附加依赖库的名字.lib 空格间隔多项 VS20xx: 项目、属性、C/C++、附加包含目录:填写附加头文件所在目录 分号间隔多项 项目、属性、链接器、附加库目录:填写附加依赖库所在目录 分号间隔多项 项目、属性、链接器(点前面的+展开)、输入、附加依赖项:填写附加依赖库的名字.lib 空格间隔多项
AndyStevens 2013-04-27
  • 打赏
  • 举报
回复
引用 7 楼 weiwudexin57 的回复:
[quote=引用 3 楼 Automation_dmu 的回复:] 有没有大牛的io_png.c文件也添加到你的工程里呢?
额,没有。不过刚试了一下,的确是没有这个错误了。不过io_png.h中包含的其他头文件中定义的函数又报错了。 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_rows referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_channels referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_image_height referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_get_image_width referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_read_png referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_set_sig_bytes referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_init_io referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_create_info_struct referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_create_read_struct referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_sig_cmp referenced in function _read_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_destroy_read_struct referenced in function _read_png_abort 1>io_png.obj : error LNK2019: unresolved external symbol _png_write_end referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_write_image referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_write_info referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_set_IHDR referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_create_write_struct referenced in function _write_png_raw 1>io_png.obj : error LNK2019: unresolved external symbol _png_destroy_write_struct referenced in function _write_png_abort 1>D:\MyProject\ASif\Debug\ASif.exe : fatal error LNK1120: 17 unresolved externals 这些文件也要添加进来是吧[/quote]要加进来的,只有头文件,连接时符号表中的这些外部符号没办法进行重定位就会出现LNK2019错误的

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧