C语言 iostream链接器错误

4nkexdtk  于 11个月前  发布在  iOS
关注(0)|答案(3)|浏览(141)

我有一些旧的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

bxpogfeg

bxpogfeg1#

C string.h头文件和C++ string头文件不可互换。
但是,总的来说,您的问题是文件得到了正确的编译,但是链接了错误的运行时库。
Dev-C++使用GCC。GCC可以根据文件扩展名正确地确定文件中的语言,但不会链接正确的运行时库,除非您特别要求它(在命令行中使用-lstdc++)。将GCC调用为“g++“(或者,在您的情况下,“mingwin32-g++“)也将获得正确的语言并链接所需的库。

yruzcnhs

yruzcnhs2#

你需要链接到你的C运行时。这取决于你的平台和编译器,但是在你的链接器命令中添加-lc就可以了。
使用C
编译器而不是ld进行链接也是如此。
在任何情况下,如果你想让你的C代码正确工作,你可能必须使用C编译器而不是ld进行链接--这通常是异常和静态初始化器正确工作所必需的。

y4ekin9u

y4ekin9u3#

我在尝试用Cygwin(g++)编译时也遇到了同样的错误。
-L/usr/local/bin -L/usr/lib添加到编译命令应该可以工作。
这可能是特定于Cygwin的,但它也可能有助于解决您的问题。

相关问题