2013-08-21 68 views
2

我有一個非常簡單的問題,包括將C庫鏈接到C++主項目中。我有C的經驗,但這是我第一次用C++編程。將C庫鏈接到C++中

該項目的結構與內部的單個文件夾:

  • main.cpp中
  • 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" 

主要包含兩個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 64日食開普勒編譯它,我得到:

Mylib_1.h error: Mylib_2_type_t does not name a type

main.cpp error: Mylib_2_function1 was not declared in this scope

...

只有以上部分被標記爲在eclipse錯誤,頭,看到包含罰款。

此外,根據蝕,則__cplusplus標誌爲假成Mylib_2.h但真正進入Mylib_1.h一些蝕誤差的

思考,我試圖經由克手動構建項目++(v4.6.3)但當我試圖鏈接庫.o與main.cpp時,我遇到了同樣的問題。

似乎很愚蠢,但我無法弄清楚它會是什麼。任何建議?

謝謝

+0

如果您認爲這個問題與include有關,我建議您從預處理器執行後將編譯的文件的內容來看看。要做到這一點,請啓用'-E'選項來執行g ++編譯器,並在生成的文件內部查看一切是否正常。開始main.cpp文件 – Amadeus

+0

好吧,我已經檢查了main.cpp和Mylib_1.c。進入Mylib_1。c一切似乎都很好:所有來自Mylib_2.h的數據都在那裏。在main.cpp中,雖然Mylib_2.h被命名了一次,但其中沒有任何數據存在... –

回答

0

你檢查你的線路

#ifndef __MYLIB_X_H 
#define __MYLIB_X_H 

是兩個文件, 如真的不同_ MYLIB _H and _ MYLIB _H?

+0

是的,它們不同... –