我有一些旧的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
3条答案
按热度按时间bxpogfeg1#
C
string.h
头文件和C++string
头文件不可互换。但是,总的来说,您的问题是文件得到了正确的编译,但是链接了错误的运行时库。
Dev-C++使用GCC。GCC可以根据文件扩展名正确地确定文件中的语言,但不会链接正确的运行时库,除非您特别要求它(在命令行中使用
-lstdc++
)。将GCC调用为“g++
“(或者,在您的情况下,“mingwin32-g++
“)也将获得正确的语言并链接所需的库。yruzcnhs2#
你需要链接到你的C运行时。这取决于你的平台和编译器,但是在你的链接器命令中添加
-lc
就可以了。使用C编译器而不是
ld
进行链接也是如此。在任何情况下,如果你想让你的C代码正确工作,你可能必须使用C编译器而不是
ld
进行链接--这通常是异常和静态初始化器正确工作所必需的。y4ekin9u3#
我在尝试用Cygwin(
g++
)编译时也遇到了同样的错误。将
-L/usr/local/bin -L/usr/lib
添加到编译命令应该可以工作。这可能是特定于Cygwin的,但它也可能有助于解决您的问题。