2014-02-22 83 views
0

我有興趣在基於c的程序中包含C++語言。我有兩個系統(主機和目標)目標系統是有限的,特別是在內存中。因此,在我的主機中,我必須靜態鏈接目標端程序所需的一些庫。但是,在我的makefile中,我一直在操作gcc補丁(在編譯和鏈接步驟中使用各種gcc標誌)。靜態鏈接C++庫失敗

一切都很好,直到使用C++語言; 例如,通過在.cpp文件iostream頭文件中,在目標系統上存在的錯誤表示:「不能解析符號‘wctob’」

我必須表明我的makefile波紋管:

in the compiling step: 

$(CXX) -O0 -I<Headers dir> $(LIBSC) -Wno-write-strings -Wno-narrowing -Wno-return-type -Wno-abi -Wno-unused-variable -DNDEBUG -Wa, -c -fmessage-length=0 -I<Headers dir> -march=4kec -EL -o "[email protected]" "$<" 


in the linking step: 

$(CXX) -lpthread -Wl,-Map,output.map $(MyFlags) $(LIBS) $(STRIP) -muclibc -march=4kec -EL -o 
"output.elf" $(OBJS) $(LIBS) $(MyFlags) -Wl,-rpath -Wl,<LIBDIR> -L<LIBDIR> 

------一些定義

MyFlags = -lc -static-libstdc++ -static-libgcc;(在連接步驟中使用這樣的標誌)

LIBDIR = is the address of needed libraries

LIBSC = -nostdinc++;(在編譯步驟中使用這樣的標誌)

Headers dir =是由程序員需要包括C和C++頭文件的地址。

LIBS and OBJS也是需要的庫和對象的列表。

此外,我將libdir添加到ld.so.conf和LD_LIBRARY_PATH中,但問題並沒有解決。 (我的g ++版本是4.7.3。)

任何人都可以幫我嗎?

回答

0

您必須告訴C++編譯器使用C命名和符號。所以:

extern "C" { 

// your cpp codes 

}