GCC 在 lib 中找不到函数

Posted

技术标签:

【中文标题】GCC 在 lib 中找不到函数【英文标题】:GCC doesn't find functions in lib 【发布时间】:2020-12-28 11:11:32 【问题描述】:

我有一个 C 文件,它使用多个 lib 文件。 我正在尝试按以下方式编译文件:

gcc -o myprogram main.c list.lib filelib.lib

但是,在尝试编译时,我得到一堆 undefined reference 我正在使用的所有 lib 函数的错误。

我在互联网上找到了一个解决方案并尝试了以下方法:

gcc -o myprogram main.c -l list -l filelib

现在我收到以下错误:

cannot find -llist
cannot fint -lfilelib

我做错了什么?

编辑: 这两个库最初都是使用 Visual Studio 2019,发布模式 x64 创建的。 我正在使用 Windows 10、64 位架构。 在我运行 gcc 的文件夹中,我有以下文件:

main.c
list.lib (copied from VS)
list.h (copied form VS)
filelib.lib (copied from VS)
filelib.h (copied from VS)

在我的 VS 中的 lib 代码中,我确保函数具有 c 链接:

#ifdef __cplusplus
#define C_LINKAGE extern "C"
#else
#define C_LINKAGE
#endif

(两个库中每个声明的函数都以 C_LINKAGE 宏开头)

【问题讨论】:

您遇到了哪些函数错误?它们在哪里(在哪些库中)定义?什么是库依赖项?哪个库取决于哪个其他库(因为与库链接时顺序很重要)。 顺序确实很重要,如果库相互依赖,您应该添加start-group / end-group选项。见***.com/questions/5651869/… filelib 依赖于 list,main.c 依赖于两者 对于我尝试使用的每个 lib 函数,我几乎都会遇到错误 请添加一个目录列表作为文本显示哪些文件存在。你的操作系统是什么?您是否自己创建了这些库?如果是,请显示您用于构建库的命令。请edit您的问题添加所要求的信息,不要使用cmets来回答。 【参考方案1】:

.lib 文件是特定于 MSVC 的,gcc 无法处理它们,gcc 可以处理 .a 库或 dll(在 Windows 上)

如果您想使用 gcc,请使用 gcc 重建库,或者让 MSVC 创建 DLL。

或者坚持使用微软并使用 MSVC 处理一切。

【讨论】:

以上是关于GCC 在 lib 中找不到函数的主要内容,如果未能解决你的问题,请参考以下文章

在 GCC 10.3.0 中找不到 _mm256_rem_epu64 内在函数

构建 TensorFlow:bazel 在非标准目录中找不到 libstdc++

在 tesseract 中找不到 Lib 错误 [关闭]

在项目“my-lib”中找不到配置“生产”

Eclipse neon C 程序没有构建 g++ 并且在路径错误中找不到 gcc

g++ 在 /usr/local/lib 中找不到库