Подтвердить что ты не робот

Ошибка компоновщика iostream

У меня есть старый код C, который я хотел бы объединить с некоторым кодом на С++.

Используемый код C имеет следующие значения:

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

Теперь я пытаюсь использовать С++ с iostream следующим образом:

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

Но я все время получаю следующие ошибки компоновщика при компиляции:

[Ошибка компоновщика] undefined ссылка на `std::string:: size() const '

[Ошибка компоновщика] undefined ссылка на `std::string:: operator [] (unsigned int) const '

[Ошибка компоновщика] undefined ссылка на `std::string:: operator [] (unsigned int) const '

[Ошибка компоновщика] undefined ссылка на `std::string:: operator [] (unsigned int) const '

[Ошибка компоновщика] undefined ссылка на `std:: ios_base:: Init:: Init() '

[Ошибка компоновщика] undefined ссылка на `std:: ios_base:: Init:: ~ Init() '

ld возвращен 1 статус выхода

Как это разрешить?

Изменить: Мой компилятор - Dev-С++ 4.9.9.2

4b9b3361

Ответ 1

Заголовок C string.h и заголовок С++ string не являются взаимозаменяемыми.

В целом, однако, ваша проблема заключается в том, что файл правильно компилируется, но неправильная библиотека времени выполнения получает связь.

Dev-С++ использует GCC. GCC может правильно определить язык в файле на основе расширения файла, но не будет связывать нужную библиотеку времени выполнения, если вы специально не попросите его (-lstdС++ в командной строке). Вызов GCC как "g++" (или, в вашем случае, "mingwin32-g++" ) также получит нужный язык и свяжет нужную библиотеку.

Ответ 2

Вам нужно связать себя со средой выполнения С++. Это зависит от вашей платформы и компилятора, но добавление -lC в вашу ссылку может сделать это.

Таким образом, можно связать, используя ваш компилятор С++, а не ld.

В любом случае вам, вероятно, придется ссылаться с использованием компилятора С++, а не ld, если вы хотите, чтобы ваш код на С++ работал правильно - часто требуется, чтобы исключения и статические инициализаторы работали правильно...

Ответ 3

Я получил ту же самую точную ошибку, когда пытался скомпилировать Cygwin (g++).

просто добавьте -L/usr/local/bin -L/usr/lib в правила компиляции, и он должен работать.

Это может быть специфично для Cygwin, но это может помочь решить вашу проблему.