GCC在库中找不到函数

xtfmy6hx  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(246)

我有一个C文件,它使用了多个lib文件。我尝试用以下方法编译该文件:

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

然而,当我试图编译时,我得到了一堆我正在使用的所有lib函数的undefined reference错误。
我在网上找到了一个解决方案,并尝试了以下方法:

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库代码中,我确保函数具有c链接:

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

(each声明的函数都以C_LINKAGE宏开头)

7vux5j2d

7vux5j2d1#

.lib文件是MSVC特定的,gcc无法处理它们,gcc可以处理.a库或dll(在Windows上)
如果要使用gcc,请使用gcc重建库,或者让MSVC创建DLL。
或者坚持微软,一切都使用MSVC。

jdgnovmf

jdgnovmf2#

当后缀不是“.a”时,只需用“-l:liblist.lib”代替“-llist”。这至少可以解决“找不到”的问题。

cqoc49vn

cqoc49vn3#

我想对@Harkaitz的这个提示表示感谢。
我花了几天的时间来弄清楚为什么GCC(Windows上的ARM交叉编译)无法在组中找到我的库。我希望那些拼写问题能在某个地方得到更多的记录...
基本上,'-l'和'lib.a'之间的':'解决了这个问题,如下所示:

-L./my_path_to_libs -Xlinker --start-group -l:libmain.a -Xlinker --end-group

根据arm gcc版本,-Xlinker可以是-Wl

相关问题