2008-11-05 7 views
13

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

код 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" 

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

[Linker error] undefined ссылка на `std :: string :: size() const '

[Ошибка Linker] неопределенная ссылка на `станд :: струнной :: оператор [] (беззнаковое целое) сопзЬ»

[Linker Error] неопределенная ссылка на `станд :: струнной :: оператор [] (без знака ИНТ) Const '

[Linker ошибка] неопределенная ссылка на `станд :: струнной :: оператор [] (беззнаковое целое) сопзЬ'

[Linker Error] неопределенная ссылка на` станд :: ios_base :: Init :: Init() '

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

л.д. возвращается статус 1 выхода

Как решить эту проблему?

Edit: Мой компилятор Dev-C++ 4.9.9.2

ответ

26

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

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

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

3

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

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

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

+0

Не будет `-lc` связываться с` libc`, который является библиотекой времени выполнения C, а не C++? Для C++ нужно связать с C++ Standard Library, `libstdC++`, используя параметр `-lstdC++` для `gcc` (или просто используя` g ++ `, который делает это автоматически). Не пытайтесь помочь, если вы не знаете, как, потому что вы можете одинаково хорошо совершать озорство. – SasQ 2012-08-04 04:36:06

1

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

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

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