【问题标题】:Integrating .lib files with C code written on Linux将 .lib 文件与在 Linux 上编写的 C 代码集成
【发布时间】:2023-01-12 05:20:02
【问题描述】:

我有在 Linux 机器上编写并运行的预先存在的代码。我需要添加到这段代码中,这段新代码依赖于使用 VS 的库。我决定使用 WSL(适用于 Linux 的 Windows 子系统)在 Visual Studio 上进行开发,然后将可执行/输出文件带到我的 Linux 机器上并在那里运行。

我正在添加的代码我的程序使用功能函数(双参数)来自图书馆真实库

我已经包含了头文件

#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 上编写的代码结合起来?

在线研究似乎与我的类似问题不符。

我已经尝试将 GCC 用于 Remote Linux,但产生了类似的错误。但是(WSL 或 Remote Linux)似乎都不能很好地将 .lib 文件与在 Linux 上编写的源代码结合起来。

现在,我可以添加RealFunc.c这会清除错误,但我只会得到另一个未定义的引用错误,依此类推(RealFunc.c有很多其他的依赖关系在真实库)

Configuration properties > General > Platform Toolset

我也试过只在 Linux 上开发,将 .lib 文件带过来并更新我的 makefile 来链接它,但它没有用(我相信因为 Linux 不使用 .lib)

我的行动路线应该是什么?我需要里面的代码真实库.我是否需要硬着头皮重新编译所有源代码真实库?我是否需要 100% 转移到 Linux 并使用 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.

【问题讨论】:

  • Microsoft C++ 编译器编译的对象和库不能在 Linux 上使用。
  • .lib文件的Linux版本是.a文件。 .lib 文件是如何编译的?
  • @Jason .lib 文件是使用 VS 在 Windows 上编译的。 (C 语言标准:默认(旧版 MSVC))。我有可用的 .lib 文件的解决方案。它不能像更改配置属性 > 图书馆员 > 输出文件“Reallib.lib”到“Reallib.a”那么简单,对吧?
  • 选项 A,在 Linux 中重新编译 lib 源代码以创建适合 Linux 的 .a 库。方案B,在Windows安装GCC交叉编译到Windows重新编译库但是会生成一个Linux.a库。

标签: c linux gcc windows-subsystem-for-linux undefined-reference


【解决方案1】:

在 Linux 中没有使用 Windows 库 .lib 的正确/本机方法,您唯一的解决方案是为目标平台重新编译库,在这种情况下,是 Linux。

选项A

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

选项B

在Windows中为Linux安装一个交叉编译器,熟悉的可以使用Cygwin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多