我已经编写了在Linux机器上运行的预先存在的代码。我需要添加这段代码,这段新代码依赖于使用VS.的库。我决定使用WSL (Linux的Windows子系统)在Visual Studio上开发,然后将可执行文件/out文件带到我的Linux机器上并在那里运行。
我添加的代码myProg.c使用了一个函数Func(double arg),该函数来自库Reallib.lib
我已经包含了头文件
#include "Support_Files/Reallib.h"
在我的项目属性页中,.lib文件位于Additional Dependencies
Support_Files/Reallib.lib
Reallib.h文件中的声明:
long Func(double arg)
在构建时,这些是我得到的错误:
/mnt/c/Users/mitch/Projects/myproject/myproject/myproject/obj/x64/Debug/myProg.c: in function `main':
undefined reference to Func
ld returned 1 exit status
如果我已经包含了我的库,为什么我得到这个错误?是因为Linux系统不使用.lib文件吗?如何将Windows上编写的代码与Linux上编写的代码合并?
网上搜索似乎不符合我类似的问题。
我已经尝试在远程Linux中使用GCC,但是产生了类似的错误。但是(WSL或Remote Linux)似乎都不能很好地将.lib文件与Linux上编写的源代码组合在一起。
现在,我可以添加realfuncc这将清除错误,但我只会得到另一个未定义的引用错误,等等(realfuncc有很多其他依赖关系在Reallib.lib中得到处理)
配置属性>一般比;平台工具集
我也试过只在Linux上开发,把。lib文件带来并更新我的makefile链接,但它不起作用(我相信因为Linux不使用。lib)
我应该采取什么行动?我需要的代码是在Reallib.lib。我需要咬紧牙关重新编译Reallib.lib中的所有源代码吗?我需要只是转移到Linux 100%和使用VS Code吗?我喜欢使用VS,因为它使编译和链接选项更容易。我对C和Linux还是个新手。
我使用的是Visual Studio 2022 17.4.3
WSL Ubuntu (v20.04)
$ gcc --version
gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
没有合适的/本地的方法在Linux中使用Windows库.lib
,你唯一的解决方案是为目标平台重新编译库,在这种情况下,是Linux。
选择
在Linux中使用GCC或Clang重新编译库源代码,生成适当的.a
静态库或.so
共享库。
选项B
在Windows上安装一个交叉编译器,如果你熟悉Cygwin,你可以使用它。