编译函数生成静态库时遇未定义main引用错误,如何解决?
解决静态库编译时的"undefined reference to 'main'"错误
错误原因
你误将创建静态库的操作当成了编译可执行文件:gcc默认会尝试链接生成可执行程序,而可执行程序必须包含main函数作为入口,因此出现链接错误。
正确操作步骤
第一步:编译源文件为目标文件(只编译,不链接)
使用-c参数告诉gcc仅生成目标文件(.o),不进行链接操作:gcc -c source1.c source2.c执行后会得到
source1.o、source2.o等目标文件。第二步:打包目标文件为静态库
用ar工具将目标文件打包成静态库(.a格式),rcs参数负责创建库、添加文件并生成索引:ar rcs libmylib.a source1.o source2.o这里
libmylib.a是静态库的标准命名(前缀lib,后缀.a)。
后续使用静态库编译可执行程序
如果要基于这个静态库生成可执行文件,需要编写包含main函数的源文件(比如main.c),然后执行:
gcc main.c -L. -lmylib -o myprogram
-L.:指定当前目录为静态库的搜索路径-lmylib:链接libmylib.a(自动省略lib前缀和.a后缀)-o myprogram:指定生成的可执行文件名
内容的提问来源于stack exchange,提问作者Akd John
相关产品推荐
相关产品推荐

