2

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

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

  • 主文件
  • Mylib_1.c
  • Mylib_1.h
  • Mylib_2.c
  • Mylib_2.h

主要调用 -> 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 中的所有内容都包裹在 extern "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 中为假,但在 Mylib_1.h 中为真

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

似乎很愚蠢,但我无法弄清楚它可能是什么。有什么建议吗?

谢谢

4

1 回答 1

0

你检查过你的台词

#ifndef __MYLIB_X_H
#define __MYLIB_X_H

这两个文件真的不同,例如_ MYLIB 1 _H 和_ MYLIB 2 _H?

于 2013-08-22T08:55:51.617 回答