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++