在 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 新手。
对于我的任务,我必须为 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 新手。