簡體   English   中英

從Visual Studio 2012項目創建“ .o”文件

[英]Creating a “.o” file from a Visual Studio 2012 project

我在Visual Studio 2012中為類編寫了一個程序,並且希望在Linux機器上運行它。 我曾嘗試在Linux機器上進行編譯,但是我相信我使用的某些庫與跨平台不兼容。 無論如何,我可以創建一個可以在Linux上運行的.o文件,不需要我更改代碼嗎?

語言:C ++這是我使用的庫:

#include <iostream>
#include <queue>
#include <map>
#include <climits> 
#include <iterator>
#include <algorithm>
#include <fstream>
#include <string>
#include <iomanip>

當我嘗試在Linux中編譯時會發生什么

Main.cpp: In function ‘int main()’:
Main.cpp:110:24: error: no matching function for call to             'std::basic_ifstream<char>::basic_ifstream(std::string&)’
Main.cpp:110:24: note: candidates are:
/usr/include/c++/4.6/fstream:460:7: note: std::basic_ifstream<_CharT,     _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char, _Traits     = std::char_traits<char>, std::ios_base::openmode = std::_Ios_Openmode]
/usr/include/c++/4.6/fstream:460:7: note:   no known conversion for argument 1 from     ‘std::string {aka std::basic_string<char>}’ to ‘const char*’
/usr/include/c++/4.6/fstream:446:7: note: std::basic_ifstream<_CharT,     _Traits>::basic_ifstream() [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.6/fstream:446:7: note:   candidate expects 0 arguments, 1 provided
/usr/include/c++/4.6/fstream:420:11: note:     std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)
/usr/include/c++/4.6/fstream:420:11: note:   no known conversion for argument 1 from     ‘std::string {aka std::basic_string<char>}’ to ‘const std::basic_ifstream<char>&’

您列出的頭文件似乎都沒有特定於Visual Studio或Windows,因此假設您在Linux機器上安裝了正確的C ++標准庫,則應該對其進行編譯。

如果您真的想交叉編譯,則必須將gcc的源代碼以及C ++標准庫頭文件和二進制文件下載到Windows機器上。 然后構建用於交叉編譯的編譯器(這可能意味着安裝“ Windows到Unix兼容版本的gcc的窗口”,例如Cygnus cygwin或gcc MingW)。 而且要實現這一目標將不是直截了當的。 相信我,除非您真的需要,否則您不想這樣做。

如果由於某種原因不想在linux機器上進行編譯,更好的解決方案是在Windows機器上安裝一個虛擬機,然后在其上安裝Linux,然后將該Linux VM用作編譯系統。

編輯:

需要澄清的是,基於問題中的編輯:問題似乎是C ++ 11功能的使用,這大概是Visual Studio中的默認設置,其中gcc / g ++將采用更為保留的方法。 解決方案是告訴編譯器在構建的命令行上將C ++ 11標准與-std=c++11一起使用。 這應該允許擴展使用字符串中的名稱打開文件才能正常工作。

老實說,您最好以更加跨平台友好的方式來構建它,尤其是看到它是C ++時,沒有理由依賴Visual Studio。 嘗試查看類似於code :: blocks的東西,以構建可在Linux上運行的代碼。

我認為,即使您找到方法,也不會奏效。 您需要在Linux機器中單獨生成.o

暫無
暫無

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

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