Ошибка компоновщика 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
Ответы
Ответ 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, но это может помочь решить вашу проблему.