[英]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.