我想将两个源合并到一个 C 静态库中。
renderay_core.c
renderay_shapes.c
及其相应的头文件。我首先将其编译为独立(非库)以避免此处出现错误。
测试.c
#include <stdio.h>
#include "renderay_core.c"
#include "renderay_shapes.c"
int main(void){
Canvas* canvas = new_Canvas(5,5);
printf("Test");
}
编译它:
gcc test.c renderay_core.c renderay_shapes.c -o main.exe
效果很好。
现在我准备将其打包到静态库中。执行如下:
gcc -c renderay_core.c renderay_shapes.c
现在我已经准备好将对象链接为库。
ar rcs librenderay.a renderay_core.c renderay_shapes.c
是我为此使用的命令。然后我尝试使用库而不是纯源文件来编译 test.c。
gcc test.c -o main.exe -static -L -lrenderay
现在,当我尝试编译它时,我收到错误警告:
undefined reference to "new_Canvas"
告诉我链接到库失败。我在这里做错了什么?我错过了什么?
最佳答案
编译 - 不链接 - 源文件
gcc -c renderay_core.c -o renderay_core.o
gcc -c renderay_shapes.c -o renderay_shapes.o
然后打包
ar -rcs librenderay.a renderay_core.o renderay_shapes.o
并使用链接到它
gcc test.c -o main.exe -static -L. -lrenderay
您需要 L
来指定非标准位置 - 此处的当前目录。
关于c - 用 C 语言构建静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031967/