将代码从Linux移植到MinGW
porting code from Linux to MinGW
我正在写一个小类,它可以在PC上创建/删除/重命名/搜索文件和目录。
我成功地编写了这个类并在Linux上运行。
当我试图在MinGW中运行相同的类代码时,它给出了一个错误。我可以缩小到:mkdir函数在Linux中,Cygwin有2个参数(目录名、模式权限)但是在MinGW中只有一个参数(目录名)。
我的问题是:a)让代码在两个操作系统上都能工作的最佳方式是什么。b) 虽然我从未使用过,但我听说预处理器指令可以像#ifdefined一样放#endif。。c)使用预处理器指令是一种很好的编程实践。正如我所学到的,预处理器指令应该尽量少地使用。
有人能帮我吗:
这是我在Linux和Cygwin上运行的代码:
#include "BioDatabase.h"
#include <dirent.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
BioDatabase::BioDatabase() {
string s = getcwd(NULL,0);
changeDirectory(s,"*");
}
BioDatabase::BioDatabase(string directoryName, string extension)
{
changeDirectory(directoryName, extension);
}
bool BioDatabase::createDirectory(string st)
{
if( mkdir(st.c_str(),0755) == -1)
{
cerr <<endl<<"BOSERR-BioDatabase, createDirectory: Path or file function not found or Permission deniednn";
return false;
}
flag =1;
return true;
}
您可以编写类似的代码
#if _POSIX_C_SOURCE
if( mkdir(st.c_str()) == -1)
#else
if ((mkdir(st.c_str(),0755) == -1)
#endif
另请参阅feature_test_macros(7)手册页。
1)您可以使用预处理器在一个平台上做一件事,在另一个平台中做不同的事情。例如:
#ifdef mingw32
/* windows specific code, like mkdir()... */
#else
/* other platform code, like a different way to call mkdir() */
#endif
2) 是的,你是绝对正确的:尽可能地限制使用它们但是你很快就会发现你无法完全避开它们。
3) 最好的做法是使用一个脚本来检查功能,而不是基于每个操作系统。通常,这涉及到编写配置脚本(或类似),这是另一条学习曲线。尽管如此,它还是让您可以通过检查功能而不是将平台添加到长列表中。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 如何在 Linux for Windows 上通过 MinGW 构建静态 ICU 的 Boost
- 分段 Linux Ubuntu 中的 g++ 错误,但在 Windows 中的 g++/MingW 中,在 C++ 中打
- 使用 MINGW 和 CPLEX 库链接从 Linux 编译 Windows 可执行文件
- Linux MinGW:在编译时,他输出了 8 个"nultiple definitions"列表
- C++在Linux机器上使用cmake Qt5 Webkit进行交叉编译,使用mingw针对Windows,失败了
- C++程序使用 mingw 在 Linux 上交叉编译在 MSy2 中工作,但不能直接在 Windows 中工作
- 编译C 程序,该程序将SFML与MINGW一起到端口,从Linux到Windows
- Mutex锁会在mingw中暂停程序,但在linux上不会
- 在Windows和Linux上使用Boost/ASIO在MingW中使用Boost/ASIO进行故障
- 交叉编译Qt(Linux/MINGW -> Windows):各种未定义的引用
- 在Linux上与MinGW交叉编译C++代码,针对Windows:发生错误
- MinGW DLL项目与linux的兼容性
- 模板专用化会导致Windows上的MinGW链接错误,而不是Linux上的GCC
- 将代码从Linux移植到MinGW
- gcc(Linux/MinGW)是否存在编译器标志,以便在运行时引发除以零的错误
- 如何在Linux上调用MinGW交叉编译器
- 在linux下使用mingw交叉编译器声明"参数"中的两种或多种数据类型
- 如何安装适用于Mingw Linux编译环境的BerkeleyDB
- 在Linux上与mingw-w64交叉编译时声明冲突