业务开发使用Go语言,有的时候会引用c的代码,通常以静态库的形式调用,介绍一下linux平台静态库的制作与使用方式:
HelloWorld库代码:
HelloWorld.c文件
/**
* 简单静态库文件使用
*/
#include "HelloWorld.h"
/* 库函数 */
void hello(void)
{
printf("Hello World \r\n");
return ;
}
HelloWorld.h文件
#include <stdio.h>
void hello(void);
静态库的Makefile:
# 静态库的使用例子
# 生成libhelloworld.a静态库
lib:
gcc -Wall -c HelloWorld.c
ar -crv libhelloworld.a HelloWorld.o
编写测试程序调用静态库:
测试程序代码:
/**
* 静态库的使用
*/
/* 引用静态库的头文件 */
#include "HelloWorld.h"
int main(void)
{
/* 调用静态库函数 */
hello();
return 0;
}
编译选项:
#-l选项后面跟上表示引用的库名
#-L选项表示库的搜索路径
app:
gcc -Wall -o demoapp call_lib.c -L. -lhelloworld
运行截图:
可能遇到的错误:
./libhelloworld.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld 返回 1
原因可能是没有引用静态库的头文件或者静态库编译有错误。