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

yws3nbqq  于 2023-01-12  发布在  Linux
关注(0)|答案(1)|浏览(80)

我有一个预先存在的代码,是写的,并在Linux机器上运行。我需要添加到这个代码,这个新的代码依赖于一个库使用VS。我已经决定开发Visual Studio使用WSL(Windows子系统的Linux),然后采取可执行文件/出文件到我的Linux机器上,并在那里运行它。
我添加的代码 myProg.c 使用了一个函数 Func(double arg),该函数来自库 Reallib.lib
我已经包含了头文件

#include "Support_Files/Reallib.h"

在项目属性页中,.lib文件位于“其他依赖项”

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或远程Linux)似乎都不能很好地将.lib文件与Linux上编写的源代码结合起来。
现在,我可以添加 RealFunc.c,这样就可以清 debugging 误,但我只会得到另一个未定义的引用错误,等等(RealFunc.c 有大量其他依赖项,这些依赖项在 Reallib.lib 中处理)
Configuration properties > General > Platform Toolset
我也试过只在Linux上开发,把.lib文件带过来,更新我的makefile来链接它,但是没有效果(我相信是因为Linux不使用.lib)
我的行动路线应该是什么?我需要 Reallib.lib 中的代码。我需要咬紧牙关重新编译 Reallib.lib 中的所有源代码吗?我需要完全转向Linux并使用VS代码吗?我喜欢使用VS,因为它使编译和链接选项更容易。我对C和Linux还是个新手。
我正在使用Visual Studio 2022 17.4.3
WSL Ubuntu(版本20.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.
lb3vh1jj

lb3vh1jj1#

在Linux中使用Windows库.lib没有适当的/本机方法,唯一的解决方案是针对目标平台(在本例中为Linux)重新编译库。

备选办法A

只需使用GCC或Clang在Linux中重新编译库源代码,即可生成正确的.a静态库或.so共享库。

备选案文B

在Windows for Linux中安装一个交叉编译器,如果你熟悉它,你可以使用Cygwin

相关问题