簡體   English   中英

iostream鏈接器錯誤

[英]iostream linker error

我有一些舊的C代碼,我想與一些C ++代碼結合起來。

以前的C代碼包含以下內容:

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

現在我試圖讓它像這樣使用帶有iostream的C ++:

#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

C string.h標頭和C ++ string標頭不可互換。

但總的來說,您的問題是文件正在被正確編譯,但是錯誤的運行時庫正在被鏈接。

Dev-C ++使用GCC。 GCC可以根據文件擴展名正確地確定文件中的語言,但不會鏈接正確的運行時庫,除非您特別要求它(命令行中的-lstdc ++)。 將GCC稱為“g ++”(或者,在您的情況下,稱為“mingwin32-g ++”)也將獲得正確的語言,並將鏈接所需的庫。

您需要鏈接到C ++運行時。 這取決於您的平台和編譯器,但在鏈接中添加-lC可能會這樣做。

所以可能使用您的C ++編譯器而不是ld進行鏈接。

在任何情況下,如果您希望C ++代碼正常工作,您可能必須使用C ++編譯器而不是ld進行鏈接 - 異常和靜態初始化程序通常需要正常工作...

當我嘗試用Cygwin(g ++)編譯時,我得到了同樣的錯誤。

只需在編譯規則中添加-L/usr/local/bin -L/usr/lib

這可能是Cygwin特有的,但它也可能有助於解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM