C++ 使用C++;C项目中的库会导致一长串错误

C++ 使用C++;C项目中的库会导致一长串错误,c++,c,eclipse,gcc,mingw,C++,C,Eclipse,Gcc,Mingw,我有一个C项目,它使用C++库。然而,如果我编译C项目,我会得到一长串“对XY的未定义引用”错误 这些错误是由C++引用引起的: 编译时出错: In function `<c function>': implicit declaration of function `<function>' [...] undefined reference to `std::cerr' undefined reference to `std::basic_ostream<char

我有一个C项目,它使用C++库。然而,如果我编译C项目,我会得到一长串“对XY的未定义引用”错误

<>这些错误是由C++引用引起的:

编译时出错:

In function `<c function>':
implicit declaration of function `<function>'
[...]
undefined reference to `std::cerr'
undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
[...]
undefined reference to `__gxx_personality_v0'
more undefined references to `__gxx_personality_v0' follow

为了保证这一点,所有的代码包含的C++代码库都被这样的<代码>外部“C”< /代码>块所包围。 < > >强>编译器: C++库是使用<强> G++<强> > C项目使用<强> GCC >两者均来自<强>明> <强> > /P> CL(链接):

gcc-L-shared[…]-lstdc++-L

请注意
-lstdc++
标志

注意:

In function `<c function>':
implicit declaration of function `<function>'
[...]
undefined reference to `std::cerr'
undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
[...]
undefined reference to `__gxx_personality_v0'
more undefined references to `__gxx_personality_v0' follow
  • C项目仅包含
    .C
    .h
    文件–无
    .cpp
  • 将一个“虚拟”cpp文件放在类似的文件中不起作用
  • MinGW和Eclipse CDT靛蓝
  • C++库有一个名称,如“代码> LIB。A < /COD> -它与<代码> -L/COD>链接,设置了搜索路径。


编辑: 使用
g++
作为链接器:
std::cerr'`etc.的未定义引用消失了,但我得到了另一个错误列表:

Warning: .drectve `-aligncomm:"___hexdig_D2A",5' unrecognized
undefined reference to `<function / class / method from C++ Library>'
[...]
undefined reference to `_Unwind_Resume'
[...]
undefined reference to `__gxx_personality_v0'
more undefined references to `__gxx_personality_v0' follow
undefined reference to `__chkstk_ms'
[...]

<强>测试.CPP > C++部分

的实现
#include "Test.h"


Test::Test() : i(0) { }

void Test::aMethod()
{
    this->i++;
}


void invoke()
{
    Test i;
    i.aMethod();
}
Test.c-c接口的实现(仍在库中!)

现在,下面是第二个项目(纯C)的一部分:

(1)
:如果我删除该包含,我可以编译C项目。但是,在任何一种类或C++类中添加一个包含会导致链接时出现大量错误。不幸的是,我需要包括课程等

顺便说一句,下面是我在这个例子中得到的错误:

Test.cpp:(.text+0x1b): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
Test.cpp:(.text+0x64): undefined reference to `_Unwind_Resume'
Test.cpp:(.text$_ZN4TestD1Ev[Test::~Test()]+0x12): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
Test.cpp:(.eh_frame+0x6b): undefined reference to `__gxx_personality_v0'

用g++而不是gcc链接您的项目。g++将在必要的C++运行时实现中进行链接。

这个问题看起来像是明文GCC中的一个错误。
  • 使用GCC 3.4.5:错误如上所述
  • 使用GCC 4.7.2:无错误

<>也请确保< >代码> -LSTDC++ +<代码>是< C++ > ->代码>标志的<强>最后(!)>强。

使用<代码> g++< /C>解决了对C++ STD库问题的引用,但我也得到了一长串错误(请参阅我的编辑)。(不是标准库,而是实际的运行时内容)。尝试将
-lc++
添加到link命令中?(实际上,g++应该负责这一点……但是呃。)不起作用:
ld.exe:找不到-lc++
。作为测试,我从库中删除了所有函数调用;没有它们,我可以编译而不出错。不幸的是,我需要这些函数调用:-/如果您有test.cpp和test.c,如何创建两个不同名称的不同对象文件?使用文件
main.c
test1.c
Test.cpp
,在Red Hat(RHEL 5,x86_64)上,分别编译文件并链接到
g++-o main.o test1.o Test.o
工作正常。我也测试了一个文件,结果相同。但如果它对您有效,我会检查我的编译器。
#include "Test.h"


int main(int argc, char* argv[])
{
    doTest();
    
    return 0;
}
Test.cpp:(.text+0x1b): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
Test.cpp:(.text+0x64): undefined reference to `_Unwind_Resume'
Test.cpp:(.text$_ZN4TestD1Ev[Test::~Test()]+0x12): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
Test.cpp:(.eh_frame+0x6b): undefined reference to `__gxx_personality_v0'
Test.cpp:(.text+0x64): undefined reference to `_Unwind_Resume'
Test.cpp:(.eh_frame+0x6b): undefined reference to `__gxx_personality_v0'