在 C++ 项目中使用共享对象 (.so) 在 Windows 中使用 WSL 在 Visual Studio 中为 Linux 开发

Use Shared Object (.so) in a C++ project develop in Windows with Visual Studio for Linux using WSL

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

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

请求老板允许在你的工作电脑上安装Linux

(例如一些真​​正的 Linux 发行版,例如 Debian or Ubuntu 在一些单独的磁盘分区中)。 就工作量和时间而言,这是最便宜的路线

当然要读Advanced Linux Programming, syscalls(2), How to write shared libraries, dlopen(3), proc(5), elf(5), ld.so(8), the Program Library HowTo, the C++ dlopen minihowto, the documentation of GCC, the documentation of GNU make, the documentation of GNU binutils, the documentation of GDB.

当然,阅读更多关于 programming in C++. C++ is a difficult language (on both Linux and Windows). Refer to this website. Read later the C++11 standard n3337 的内容。

如果你编写一个单个 C++ 翻译单元foo.cc(你可以使用GNU emacs to edit it), compile it first into a shared object foo.so using一个命令g++ -Wall -Wextra -g -fPIC -shared foo.cc -o foo.so(所有警告,DWARF 调试信息,位置独立代码)。

如果您的 C++ 共享库是从 多个 C++ 翻译单元构建的,请了解如何使用 build automation tool such as GNU make or ninja. And use it in a terminal emulator on the command line. Be aware of ASLR. Use strace(1), ltrace(1), gdb(1) 来理解您或其他软件的动态行为。

在某些情况下,生成部分 C++ 代码(例如 ANTLR or SWIG) is worthwhile. Notice that Qt 就是这样做的。

考虑使用一些 cross-platform C++ 框架,例如 Qt or POCO

对于某些项目,编写您的 GCC plugin could be useful. See this draft 报告。

In short how do I consume Shared Object (.so) files from another project using Visual Studio 2019 compiling for Linux using WSL 2 ?

不要使用 Visual Studio (I never used it myself, but according to rumors it is unfit for cross-compilation from Windows to Linux). Perhaps use Visual Studio Code (to which I prefer GNU emacs, but you might try gedit, geany, vim, kate 等等...)

在 Linux 上,所有用于 C++ 编程的 IDE 将 运行 一个 GCC or Clang compiler (and you'll need to understand what compilation command they are running for you). You could also be interested by the Clang static analyzer or by Frama-C++

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

查看github or gitlab - e.g. libonion, Qt, FLTK, fish, icecream) ... Read also Linux From Scratch

最重要的是,Linux 以全新开放的心态进行编程。

阅读 Unix philosophy,它与 Linux 相关。并且与 Windows.

相关的 Microsoft 设计思想非常不同

我从未使用过 Windows(我从 1974 年开始编码),但我的偏见是 WSL 是针对 Linux 必须使用 Windows.我相信 WSL 不针对 Linux 新手。