总结从linux - windows 上(GCC与MSVC 2015) 移植C或者C++代码时候遇到的编译和链接问题
解決辦法和修改辦法的總體思想
1、在代碼的語義和功能不變的情況下,進(jìn)行c->c++的轉(zhuǎn)變,消除編譯器的跨平臺(tái)編譯報(bào)錯(cuò)問題;
2、遇到編譯問題,先看編譯器提示信息,然后逐個(gè)排查和定位,去解決問題。
?
?
1、當(dāng)遇到c中的代碼,數(shù)組使用動(dòng)態(tài)變量初始化在GCC能編譯通過,在MSVC上編譯不過的時(shí)候解決辦法
例如:
原版C:?
void func1(int number)
{
int a[number];
}
移植版C++
void func1(int number)
{
? ?std::vector<int> a(number);
}
2、當(dāng)遇到c中的代碼,某函數(shù)在不同的.c中實(shí)現(xiàn)了兩次,且是同樣的函數(shù)名稱在GCC能編譯通過,在MSVC上編譯不過的時(shí)候解決辦法
在報(bào)錯(cuò)的.cpp文件中,修改該聲明和實(shí)現(xiàn)的相同函數(shù)名稱的函數(shù)為另外一個(gè)名字
3、當(dāng)遇到c中的代碼,某函數(shù)在.cpp和.h文件都已經(jīng)聲明和實(shí)現(xiàn)過,在另外一個(gè).cpp中調(diào)用該函數(shù)的時(shí)候,報(bào)錯(cuò)該函數(shù)符號(hào)在另外一個(gè).cpp中是外部符號(hào),無法識(shí)別在GCC能編譯通過,在MSVC上編譯不過的時(shí)候解決辦法
找到該項(xiàng)目中的所有.h 試著刪掉 以下的代碼片段
#ifdef __cplusplus?
extern "C" {?
#endif
//一段代碼
#ifdef __cplusplus?
}?
#endif?
?
4、當(dāng)遇到c中的代碼,某宏定義的函數(shù)實(shí)現(xiàn)? 在GCC能編譯通過,在MSVC上編譯不過的時(shí)候解決辦法
在不變語義的情況下,改為函數(shù)
?
?
?
總結(jié)
以上是生活随笔為你收集整理的总结从linux - windows 上(GCC与MSVC 2015) 移植C或者C++代码时候遇到的编译和链接问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博客中gitalk最新评论的获取 git
- 下一篇: linux谷歌浏览器无法登陆,新版Cen