将.lib文件与Linux上编写的C代码集成



我已经编写了在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,你可以使用它。

最新更新