将 Linux 图书馆项目转换为可在 windows 中使用的图书馆项目

Converting a Linux Library Project into a Library Project usable in windows

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

请注意,它之前似乎已针对旧版本的 ndn windows 转换为 c#,但不再受支持,也不会连接当前的 ndn 网络。(https://github.com/named-data/ndn-dot-net)

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

我也查看了共享项目项目,但我能找到的东西似乎并不适合我正在尝试做的事情。

最后,我尝试使用 cygwin。我能够在我的 windows 10 机器上编译和生成 linux 风格的库(.a),但是当我试图从 .o 文件(gcc - shared -o mydll.dll mydll.o) 我 运行 陷入大量我无法解决的引用错误。

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

对于 Linux 经验有限的人,是否有任何好的参考资料或示例说明如何执行此操作?

谢谢

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

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

如果你有一些更复杂的东西,比如我上面试图转换的程序,没有从 Linux 转换到 windows 的快速修复,但是你仍然可以使用 Visual Studio 为 windows 编译程序。 操作方法如下:

  1. https://github.com/microsoft/vcpkg 下载 vcpkg 这是 windows 的 linux 包管理器,它将允许您下载 windows 许多常见的等价物Linux 包(以上我必须下载 boost 和 sqlite3)

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

  3. 为 windows 获取 dirent.h,这是一个 link:https://github.com/tronkko/dirent

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

  5. 这让我完成了大约 90% 的过程(从大约 13,000 个编译器错误减少到大约 30 个),到目前为止,其余的错误都是针对不容易进行的调用 linux 到 windows 的转换,这些代码部分必须重写。 (在上面的代码中,这将是传输文件中 tcp/udp 连接的套接字代码,Linux 和 Windows 处理它的方式截然不同,boost 确实有一个很好的指导如何使用它是 windows 中的套接字:https://www.boost.org/doc/libs/1_60_0/more/getting_started/windows.html)

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