English 中文(简体)
iostream链接错误
原标题:
  • 时间:2008-11-05 00:58:34
  •  标签:

我有一些旧的C代码,我想要和一些C++代码结合起来。

这个C代码将有以下的引用文件:

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include "mysql.h"

现在我正在尝试使用C++和iostream进行编写,就像这样:

#include <windows.h>
#include <stdio.h>
#include <string>
#include <iostream>
#include "mysql.h"

但是我在编译时不断遇到以下链接器错误:

[链接错误] 对 `std :: string :: size() const` 的引用未定义

[链接错误] 未定义到 `std::string::operator[](unsigned int) const`

[链接错误] 未定义到 `std::string::operator[](unsigned int) const`

[链接错误] 未定义到 `std::string::operator[](unsigned int) const`

[链接错误] 对 `std::ios_base::Init::Init()` 的引用未定义

[连接错误] 对 `std::ios_base::Init::~Init()` 的未定义引用。

ld返回了1个退出状态。

我该如何解决这个问题?

编辑:我的编译器是Dev-C++ 4.9.9.2。

最佳回答

C语言的string.h头文件和C++语言的string头文件不能互换。

总的来说,你的问题是文件被正确编译了,但链接了错误的运行库。

Dev-C++使用GCC。GCC可以根据文件扩展名正确确定文件中的语言,但除非您明确要求它(在命令行上使用-lstdc++),否则它不会链接正确的运行库。将GCC称为"g++"(或在您的情况下为"mingwin32-g++")也将获得正确的语言并链接所需的库。

问题回答

你需要链接你的C++运行时库。这取决于你的平台和编译器,但在你的链接行中添加-lC可能会解决。

因此,使用您的C ++编译器链接而不是ld可能会更好。

无论如何,如果您想要您的C++代码正常工作,您可能必须使用C++编译器进行链接,而不是 ld -- 这经常需要正确工作的异常和静态初始化器...

当我尝试使用Cygwin(g++)编译时,我得到了完全相同的错误。

只需要在编译规则中添加 -L/usr/local/bin -L/usr/lib 即可。

这可能只针对Cygwin,但它也可能有助于解决您的问题。





相关问题
热门标签