gpt4 book ai didi

linux - 如何将 .lib 与 "Visual C++ for linux"插件一起使用?

转载 作者:太空狗 更新时间:2023-10-29 12:24:57 25 4
gpt4 key购买 nike

我正在使用 Visual C++ for Linux plugin .我可以毫无问题地运行基本的 Hello world。我的实际项目使用了一个.lib。它编译正常,但在链接过程中出现错误(这是从 Visual Studio 的输出 Pane 中复制的):

ClCompile:
Starting remote build
Compiling sources:
Invoking g++
g++ -c -x c++ /home/devbox/projects/LinuxProgServ/LinuxProgServ/main.cpp -I /home/devbox/projects/LinuxProgServ/include/libuv -I /home/devbox/projects/LinuxProgServ/../include/lubuntu -I "/home/devbox/projects/LinuxProgServ/../include/lubuntu/x86_64-linux-gnu" -g2 -gdwarf-2 -o "/home/devbox/projects/LinuxProgServ/obj/x64/Debug/main.o" -Wall -Wswitch -W"no-deprecated-declarations" -W"empty-body" -Wconversion -W"return-type" -Wparentheses -W"no-format" -Wuninitialized -W"unreachable-code" -W"unused-function" -W"unused-value" -W"unused-variable" -O0 -fno-strict-aliasing -fno-omit-frame-pointer -fthreadsafe-statics -fexceptions -frtti -std=c++11
main.cpp
Done compiling '/home/devbox/projects/LinuxProgServ/LinuxProgServ/main.cpp'
Link:
Linking objects
Invoking ld
g++ -o "/home/devbox/projects/LinuxProgServ/bin/x64/Debug/LinuxProgServ.out" -Wl,--no-undefined /home/devbox/projects/LinuxProgServ/obj/x64/Debug/main.o -llibuv.lib
/usr/bin/ld: cannot find -llibuv.lib
collect2: error: ld returned 1 exit status

libuv.lib 在 Project Properties>Linker>Input>Library Dependencies 中指定。我尝试了以下但没有成功:

  1. 将 lib 复制到/home/devbox/projects/lib 并将该目录添加到
    带有 -L 的链接器命令,都使用 Visual Studio 的附加
    库文件夹字段并直接在附加命令行中
    选项字段。这会产生相同的最终命令。
  2. 将lib复制到输出目录,并设置复制
  3. 将本地 Windows 路径添加到 Visual Studio 的附加库文件夹
  4. 将 linux 路径从 #1 添加到 Visual Studio 的附加库文件夹
  5. 尝试使用另一个库

我制作了相同的项目,但用于 Windows 只是为了确保它可以正常工作。

我错过了什么吗?显然,我可以自己运行命令或使用 *make 的任何变体,但这不是重点。

最佳答案

当您使用 -l 将库传递给 g++ 时,g++ 会在您提供的名称前加上 lib 前缀,然后使用 查找具有该名称的文件.so.a 库搜索路径上的扩展名。按照惯例,共享库 (dll) 具有 .so 扩展名,静态库具有 .a 扩展名。

阻力最小的方法是使用 .a 扩展名构建您的库,即 libuv.a 然后将其作为 指定给 VCLinux 项目库依赖项>紫外线。并使用 -L 指定库搜索路径,就像您在步骤 1 中所做的那样。

或者,您可以将库的完整路径放在 g++ 链接命令行中,不带 -l 前缀,即 /home/devbox/projects/lib/libuv .lib 和 g++ 将像使用其他目标文件一样使用它。通过 Linker/All Options/Additional Options 设置。
更新:经过反射(reflection),第二种方法行不通。尽管 g++ (gcc) 在使用其完全限定路径指定时将接受库作为输入,但库必须出现在程序目标文件之后,以便解析引用。不幸的是,在 VCLinux 中无法控制 Additional Options 的位置,这总是将它们放在 g++ 命令行参数列表的前面,即在目标文件之前。 :(

而且,冒着显而易见的风险,该库必须使用 g++ 在 Linux 上构建,并且在链接您的程序时位于 g++ 可见的路径上。

关于linux - 如何将 .lib 与 "Visual C++ for linux"插件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44828517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com