【发布时间】:2016-05-04 15:23:00
【问题描述】:
我想将两个源代码合并到一个 C 静态库中。
renderay_core.c
renderay_shapes.c
及其对应的头文件。我首先将其编译为独立(非库)以避免出现错误。
test.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
现在,当我尝试编译它时,我收到一个错误警告:
对“new_Canvas”的未定义引用
告诉我链接到库失败。我在这里做错了什么?我错过了什么?
【问题讨论】:
-
了解头文件。不要包含实现文件。
-
您似乎是针对 C 源文件而不是目标文件运行
ar。