【问题标题】:Converting a Linux Library Project into a Library Project usable in windows将 Linux 库项目转换为可在 Windows 中使用的库项目
【发布时间】:2020-04-06 18:32:30
【问题描述】:

我正在尝试将在“https://github.com/named-data/ndn-cpp”中找到的 ndn 库项目转换为可以导入到多个现有 mfc/wpf/forms Visual Studio 项目(构建它作为 .lib 或 .dll 可以工作)。

请注意,它似乎以前已被转换为 c# for windows 用于旧版本的 ndn,但不再受支持并且不会连接到当前的 ndn 网络。(https://github.com/named-data/ndn-dot-net)

我研究了使用他们添加到 Windows 10 和 Visual Studio Linux 跨平台项目的 WSL 功能,但这些似乎都只能制作将在 Windows 中运行的 .exe,而不是 .lib或 .dll 可以导入到另一个项目中。

我也研究了共享项目项目,但我能找到的似乎不适用于我正在尝试做的事情。

最后,我尝试使用 cygwin。我能够在我的 Windows 10 机器上编译和生成 linux 样式库(.a),但是当我尝试从 .o 文件(gcc -shared -o mydll.dll mydll.o)中生成 Windows 样式 dll 时,我跑了大量我无法解决的参考错误。

有人对我应该使用哪种方法或我是否应该完全尝试其他方法有任何建议吗?

对于 Linux 经验有限的人,是否有任何好的参考资料或示例?

谢谢

【问题讨论】:

    标签: c++ linux windows cross-platform static-libraries


    【解决方案1】:

    好的。我现在已经尝试了几种方法,以下是我所学到的,可能对尝试这样做的其他人以及我目前所处的位置有用:

    如果您编写了一个简单的 Linux dll,可以使用 MSYS2 或 MINGW 将其编译为 Windows dll,说明如下:http://www.mingw.org/wiki/MSVC_and_MinGW_DLLs

    如果您有一些更复杂的程序,例如我在上面尝试转换的程序,则没有将 Linux 转换为 Windows 的快速解决方案,但是您仍然可以使用 Visual Studio 为 Windows 编译您的程序。 以下是你的做法:

      1234563
    1. 创建您自己的 unistd.h,这里有一个链接:Is there a replacement for unistd.h for Windows (Visual C)?

    2. 获取适用于 windows 的 dirent.h,这里有一个链接:https://github.com/tronkko/dirent

    3. 将 gmtime 实例替换为 _mkgmtime 或将 gmtime 重新定义为 _mkgmtime:timegm cross platform

    4. 这让我完成了大约 90% 的工作(从大约 13,000 个编译器错误到大约 30 个),到目前为止,其余的错误都是针对没有简单的 linux 到 windows 转换的调用以及那些必须重新编写部分代码。 (在上面的代码中,这将是 tranport 文件中 tcp/udp 连接的套接字代码,Linux 和 Windows 处理它的方式完全不同,不过 boost 确实有一个很好的指南来说明如何在 Windows 中使用它的套接字:https://www.boost.org/doc/libs/1_60_0/more/getting_started/windows.html

    就是这样。希望这可以帮助其他人。当我发现新事物时,我会在这个答案中添加更多内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多