我有一个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宏开头)
3条答案
按热度按时间7vux5j2d1#
.lib文件是MSVC特定的,gcc无法处理它们,gcc可以处理.a库或dll(在Windows上)
如果要使用gcc,请使用gcc重建库,或者让MSVC创建DLL。
或者坚持微软,一切都使用MSVC。
jdgnovmf2#
当后缀不是“.a”时,只需用“-l:liblist.lib”代替“-llist”。这至少可以解决“找不到”的问题。
cqoc49vn3#
我想对@Harkaitz的这个提示表示感谢。
我花了几天的时间来弄清楚为什么GCC(Windows上的ARM交叉编译)无法在组中找到我的库。我希望那些拼写问题能在某个地方得到更多的记录...
基本上,'-l'和'lib.a'之间的':'解决了这个问题,如下所示:
根据arm gcc版本,-Xlinker可以是-Wl