【问题标题】:Porting linux C code to windows将 linux C 代码移植到 windows
【发布时间】:2024-11-14 06:50:02
【问题描述】:

我很受阻,因为我想将 C 代码(在 Linux 中运行)移植到 Windows,但我不知道该怎么做,代码有以下库:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>


#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


#include "openssl/conf.h"
#include "openssl/evp.h"
#include "openssl/err.h"


#include <my_global.h>
#include <mysql.h>

#include <m_string.h>

如何将此代码移植到 Windows(在 32 和 64 中运行)?谢谢

【问题讨论】:

  • 你忘了问问题。你需要什么帮助?您需要知道您可能的解决方案是什么吗?或者您需要帮助实施特定的解决方案?还是什么?
  • 是的,对不起,我忘了问一个问题,下次我会这样做

标签: c linux windows sockets include


【解决方案1】:

没有“神奇的魔杖”或“简单的方法”来做到这一点。

如果您的代码不是 100% 符合 POSIX 标准(据我所知,Windows 不能很好地支持这一点),那么如果不进行仿真或重写,您的代码将无法在 Windows 上运行。

你可以试试:

从上面看,一些标题可能会被替换为等效的(希望如此),例如尝试io.h 以获得一些 POSIX 功能。然后你必须将 linux 套接字移植到 Windows 套接字(这是一个相对容易的任务)。 Openssl 是多平台的,所以没问题..

我不知道my_globalm_string 是什么,抱歉。

【讨论】:

  • Cygwin 的存在正是为了在 windows 下提供 posix 环境。根据我的经验,它做得很好。
  • 感谢您的及时回复,一开始大部分库都是兼容的,但是这个程序使用Linux标准套接字连接,可能我必须用winsock2修改。现在我发现著名的 my_global.h(MySQL 库)存在问题,当我尝试通过 Eclipse(使用 MinGW+GCC)编译代码时出现错误,它说以下“'rint'的静态声明遵循非静态声明”,我该怎么做才能解决它?
  • 可能对该特定功能有所帮助:*.com/a/3148354/1938163 - 也许您可以添加一个原型来修复它.. 类似于存根的东西
  • 我看到了这个函数,但它并不能解决我的问题,因为我猜是与 my_global.h 库相关的问题或某些兼容性错误
  • cmake.org/pipermail/cmake/2013-March/054140.html - 检查您是否还没有 rint 的定义,并可能尝试注释掉某些内容以避免这种情况。
【解决方案2】:

您需要使用大量预编译器语句来排除某些代码部分并包含其他部分,以使代码完全可移植而无需修改。

【讨论】: