从 Visual Studio 2012 项目创建".o"文件

Creating a ".o" file from a Visual Studio 2012 project

本文关键字:文件 创建 项目 Visual Studio 2012      更新时间:2023-10-16

我在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虚拟机作为你的编译系统。

编辑:

需要澄清的是,根据问题中的编辑:问题似乎是C++11功能的使用,这可能是Visual Studio中的默认功能,其中gcc/g++将采取更保守的方法。解决方案是告诉编译器在构建的命令行上使用带有-std=c++11的C++11标准。这应该允许使用字符串中的名称打开文件的扩展名正常工作。

老实说,你最好用对跨平台更友好的东西来构建它,尤其是考虑到它是C++,没有理由依赖visual studio。试着看看代码::块之类的东西来构建它,使其在linux上运行。

我认为即使你找到了方法,也不会奏效。您需要在Linux机器中单独生成.o