我有一个预先存在的代码,是写的,并在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.
1条答案
按热度按时间lb3vh1jj1#
在Linux中使用Windows库
.lib
没有适当的/本机方法,唯一的解决方案是针对目标平台(在本例中为Linux)重新编译库。备选办法A
只需使用GCC或Clang在Linux中重新编译库源代码,即可生成正确的
.a
静态库或.so
共享库。备选案文B
在Windows for Linux中安装一个交叉编译器,如果你熟悉它,你可以使用Cygwin。