将C库链接到C++中

Chain of C libraries into C++

本文关键字:C++ 链接      更新时间:2023-10-16

我有一个非常琐碎的问题,包括在C++主项目中包含一系列C库。我有使用C的经验,但这是我第一次用C++编程。

项目的结构是一个单独的文件夹,里面有:

  • main.cpp
  • Mylib_1.c
  • Mylib_1.h
  • Mylib_2.c
  • Mylib_2.h

main调用->Mylib_1.h,调用->My_lib2.h

//main.cpp
#include "Mylib_1.h"
//Mylib_1.h
#include "Mylib_2.h"

main包含Mylib_1和Mylib_2函数以及typedef结构

Mylib_1使用Mylib_2 的typedef结构和函数


每个Mylib_x.h中的所有内容都封装在外部"C"之间,如下所示:

#ifndef __MYLIB_X_H
#define __MYLIB_X_H
#ifdef __cplusplus
extern "C" {
#endif 
mycode         
#ifdef __cplusplus
}
#endif 
#endif

但当我尝试在Ubuntu 12.04 x64上使用eclipse kepler编译它时,我得到了:

Mylib_1.h错误:Mylib_2_type_t未命名类型

main.cpp错误:Mylib_2_function1未在此作用域中声明

在eclipse中,只有以上部分被标记为错误,标头看起来包含得很好。

此外,根据eclipse,__cplusplus标志在Mylib_2.h中为false,但在Mylib_1.h 中为true

考虑到一些eclipse错误,我尝试通过g++(v4.6.3)手动构建项目,但当我尝试将库.o与main.cpp 链接时,我遇到了同样的问题

看起来很愚蠢,但我不知道这可能是什么。有什么建议吗?

感谢

您是否检查了您的线路

#ifndef __MYLIB_X_H
#define __MYLIB_X_H

对于两个文件来说确实不同,例如_MYLIB1_H和_MYLIB2-H?