【问题标题】:Compiling from Linux to Windows从 Linux 编译到 Windows
【发布时间】:2019-06-14 00:14:54
【问题描述】:

我想从 linux 编译我的程序以在 Windows 上作为 exe 运行。我知道如何使用 mingw64 等来做到这一点,但真正的问题是 Windows 没有代码库,但 linux 有。怎么编译?

#define <sys/socket.h>
#define <arpa/inet.h>
#define <netinet/in.h>
int main(){

//some codes etc.

}

【问题讨论】:

  • 为什么不能在 Windows 机器上编译程序?如果您需要提供可在 Windows 上运行的程序,为什么不能提供要在 WSL 上编译和运行的源代码?这可能应该比你的交叉编译更简单
  • 没有动机和背景,你的问题太宽泛了。所以请edit你的问题来改进它很多。你在写什么样的程序?您正在使用的 C 标准 n1570 之外的所有功能是什么?为什么需要它可以在 Windows 上运行?为什么不将源代码提供给 Windows 用户?

标签: c linux windows sockets compilation


【解决方案1】:

您可以使用 Windows Sockets 2 (Winsock),它用于在 Windows 中进行套接字编程:

#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")

int main()
{
}

【讨论】:

  • 请注意,尽管存在许多细微差别,从WSAInit 开始,到许多相似但不同的setsocktopt。在您的应用程序代码中使用本地化的#ifdefs 来消除它们可能很诱人,但您很快就会发现它们无处不在。我的建议:用更好的 API 将它们抽象出来。
  • 或者,为了不重新发明轮子,请使用现有的跨平台库。 (例如boost::asio
  • @Swordfish 我不认为 Boost 在 C 程序中工作...... ;-)
  • @AndrewHenle Uuuups.
【解决方案2】:
#ifdef __WIN32__
    #include <winsock2.h>
#else
    #include <sys/socket.h>
#endif

为什么不试试预处理宏?

【讨论】:

  • 我知道但我想知道是否可以不使用它来编译它,?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2017-02-03
  • 2014-01-16
  • 1970-01-01
  • 2018-11-10
  • 1970-01-01
  • 2018-01-14
相关资源
最近更新 更多