在Windows中使用WSL在带有Visual Studio for Linux的Windows中开发的C ++项目中使用共享对象.so

问题描述

对于一个任务,我必须为Windows开发Linux的C ++代码。我正在将Visual Studio 2019与WSL 2一起使用,并且我运行的测试运行良好,它可以编译.out / .so / .a,并使我能够像正常项目一样调试代码。 问题是当我需要将外部.so链接到我的项目时。在常规Windows-VS-c ++开发中,我将输入链接程序定义为.lib目录。但是在Linux中,他们没有.lib(或者是他们?我对Linux-C ++不熟悉)。

简而言之,我如何使用Visual Studio 2019编译用于WSL 2的Linux来从另一个项目中使用共享对象(.so文件

解决方法

要求您的老板许可在您的工作计算机上安装Linux

(例如,某些独立的磁盘分区中的某些正版Linux发行版,例如DebianUbuntu)。 从努力和您的时间来看,这是最便宜的遵循的路线

当然要读Advanced Linux Programmingsyscalls(2)How to write shared librariesdlopen(3)proc(5)elf(5)ld.so(8),{ {3}},Program Library HowToC++ dlopen minihowto的文档,GCC的文档,GNU make的文档,GNU binutils的文档。>

当然,请详细了解GDB C ++是一种困难的语言(在Linux和Windows上)。请参阅此programming in C++。稍后阅读C ++ 11标准website

如果您编写一个单个 C ++转换单元foo.cc(可以使用n3337对其进行编辑),请首先将其编译为共享对象foo.so { {3}}命令g++ -Wall -Wextra -g -fPIC -shared foo.cc -o foo.so(所有警告,DWARF调试信息,与位置无关的代码)。

如果您的C ++共享库是由几个 个C ++转换单元构建的,请学习如何使用GNU emacs工具,例如usingbuild automation。并在命令行的终端仿真器中使用它。请注意GNU make。使用ninjaASLRstrace(1)了解您或其他软件的动态行为。

在某些情况下,生成部分C ++代码(例如,使用ltrace(1)gdb(1))是值得的。请注意,ANTLR正在这样做。

考虑使用一些跨平台的C ++框架,例如SWIGQt

对于某些项目,编写Qt可能会有用。请参阅POCO报告。

简而言之,我如何使用Visual Studio 2019编译用于WSL 2的Linux来从另一个项目中使用共享对象(.so)文件?

不要使用GCC plugin(我自己从未使用过,但是根据传闻,它不适合从Windows到Linux的this draft)。也许使用Visual Studio(我更喜欢cross-compilation,但是您可以尝试Visual Studio CodeGNU emacsgeditgeany等)

在Linux上,所有用于C ++编程的IDE都将运行vimkate编译器(并且您需要了解它们正在为您运行什么编译命令)。您可能也对GCCClang

感兴趣

从Linux上的现有开源C ++项目中汲取灵感

Clang static analyzerFrama-C++-例如githubgitlablibonionQtFLTK)...另请参阅fish

最重要的是,以崭新和开放的思维方式进行Linux编程。

阅读有关icecream的信息,它与Linux相关。。而且与与Windows有关的Microsoft设计思想完全不同。

我从没有使用过Windows(并且我从1974年开始就从事编码工作),但是我的偏见是WSL是针对Linux专家的,他们必须(对于他们而言)非常讨厌使用Windows。我相信WSL并非针对Linux新手。