LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1010|回复: 3

C++里如何调用C的函数?

[复制链接]
发表于 2004-12-3 13:04:49 | 显示全部楼层 |阅读模式
本人刚刚接触C++,有一问题请教。
我有一个类叫A,类的声明放在A.hh里,类的实现放在A.cc里,
假如说我的程序现在需要XML的支持, 我在A.hh里放入libxml2的头文件,可是libxml2是用C写的。我在A.cc里如何才能调用到libxml2的函数,如果直接调用的话(假如我调用xmlNewTextWriterFilename(fp,0)),编译是可以通过,可是在link的时候说undefined reference to the function 'xmlNewTextWriterFilename'
这个问题如何解决,是不是要用extern 'C'?可是我加了还是一样呀?
发表于 2004-12-3 13:12:08 | 显示全部楼层
  1. [color=blue]
  2.         extern "C" {
  3.                 // declarations of C functions...
  4.         }
  5. [/color]
复制代码
 楼主| 发表于 2004-12-3 13:48:19 | 显示全部楼层

我试过了,可是还是有问题呀。

我是这样做的
A.hh
#ifdef __cplusplus
extern "C" {
#endif
#include <libxml/encoding.h>
#include <libxml/xmlwriter.h>
#ifdef  __cplusplus
}
#endif

class A{
    public:
      int a_function();
}

A.cc
int A::a_function()
{
    xmlTextWriterPtr writer;
    /* xmNewTextWriterFilename is function from xmlwriter.h */
    writer = xmlNewTextWriterFilename(fp, 0);
    return 0;
}

当我再次编译的时候,还是同样的错误。 我想问一下,xmlNewTextWriterFilename(fp,0)这个函数是不是要再次声明一下?还是直接就可以拿来用了?
还有就是,我看了<libxml/xmlwriter.h>的源代码,我发现在这个文件里面已经有 extern "C" 这样的声明了,请问我还用在写一遍extern "C" 吗?如果仁兄在linux下,可否看一个这个文件, 这个文件在
/usr/include/libxml2/libxml/xmlwriter.h,谢谢!
 楼主| 发表于 2004-12-3 16:03:32 | 显示全部楼层
我的问题已解决了。在libxml的mail archive里找到了答案,原来在编译的时候要加上-lxml2 的LDFLAGS, 我还以为是我的程序的问题。而且就如我所言,在xmlwriter.h里已经有extern "C" 的声明了,在我的程序里就不用再加任何东西了,只有include,然后拿来用就行了。
不管怎样,多谢crquan。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表