请教高手教一下用gcc编译c语言函数,再合并为静态库,最后调用的过程。

现在我写了如下程序,编译运行正确

然后我把上述3部分,分别复制到单独的a.c, b.c m.c三个源文件,并用mingw编译如下

3个命令都成功,根据我的理解,最终ablib应该是静态库了,包含了Fa,Fb两个函数.
接下来该怎么编译m.c呢? 这个命令好像不行 gcc -o C:\m.exe -lC:\ablib C:\m.c

应该编译成.a文件
ar rc c:\libab.a c:\a.o c:\b.o
然后,再编译执行文件
gcc -o c:\m.exe c:\m.c -LC:\ -lab
你这样试试追问

我复制试了一下,错误如下

后面那句因为依赖于前一句,所以没试

追答

提示的错误是c:\a.o没有了,是不是被删除了? 你要重新生成这个文件啊

追问

对的,我试了,你的命令是对的,我还以为前面的两句都不需要了,看来你这可以。
你能不能解释一下为什么呢,难道说扩展名也会影响?还有,第二句的 大小写l你能不能再解释一下啊?

追答

在写L是指定库所在目录
小写l是指定链接的库文件,gcc要求链接的库文件格式为libXXX.a,-l时,只需要XXX,gcc会自动补相应的前缀lib和后缀.a

追问

    必须大小写l配合才能实现最后编译m的功能吗?

    你说的只需要XXX是否相当于模糊查询功能?假如有冲突的文件名是否就不管用了?能否再帮忙写一个只需要大写或者小写(如果可能)而且是全路径的命令?

追答

XXX这种不是模糊查询,是确定的,这是规定格式,文件名不会有冲突的,补全后的文件只会在磁盘上有一个

应该可以直接调用全名的但不能用-l 单独写-L是没有意义的,它只是指明库所在的路径,如果库文件就在当前目录下,则可以不写-L
gcc c:\m.c -o m.exe c:\libab.a

温馨提示:答案为网友推荐,仅供参考
相似回答