问题描述
对于一个任务,我必须为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发行版,例如Debian或Ubuntu)。 从努力和您的时间来看,这是最便宜的遵循的路线。
当然要读Advanced Linux Programming,syscalls(2),How to write shared libraries,dlopen(3),proc(5),elf(5),ld.so(8),{ {3}},Program Library HowTo,C++ 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工具,例如using或build automation。并在命令行的终端仿真器中使用它。请注意GNU make。使用ninja,ASLR,strace(1)了解您或其他软件的动态行为。
在某些情况下,生成部分C ++代码(例如,使用ltrace(1)或gdb(1))是值得的。请注意,ANTLR正在这样做。
考虑使用一些跨平台的C ++框架,例如SWIG或Qt。
简而言之,我如何使用Visual Studio 2019编译用于WSL 2的Linux来从另一个项目中使用共享对象(.so)文件?
不要使用GCC plugin(我自己从未使用过,但是根据传闻,它不适合从Windows到Linux的this draft)。也许使用Visual Studio(我更喜欢cross-compilation,但是您可以尝试Visual Studio Code,GNU emacs,gedit,geany等)
在Linux上,所有用于C ++编程的IDE都将运行vim或kate编译器(并且您需要了解它们正在为您运行什么编译命令)。您可能也对GCC或Clang
感兴趣从Linux上的现有开源C ++项目中汲取灵感
看Clang static analyzer或Frama-C++-例如github,gitlab,libonion,Qt,FLTK)...另请参阅fish。
最重要的是,以崭新和开放的思维方式进行Linux编程。
阅读有关icecream的信息,它与Linux相关。。而且与与Windows有关的Microsoft设计思想完全不同。
我从没有使用过Windows(并且我从1974年开始就从事编码工作),但是我的偏见是WSL是针对Linux专家的,他们必须(对于他们而言)非常讨厌使用Windows。我相信WSL并非针对Linux新手。