我想将两个源合并到一个 C 静态库中。
renderay_core.c
renderay_shapes.c
Run Code Online (Sandbox Code Playgroud)
及其相应的头文件。我首先将其编译为独立(非库)以避免此处出现错误。
测试.c
#include <stdio.h>
#include "renderay_core.c"
#include "renderay_shapes.c"
int main(void){
Canvas* canvas = new_Canvas(5,5);
printf("Test");
}
Run Code Online (Sandbox Code Playgroud)
编译它:
gcc test.c renderay_core.c renderay_shapes.c -o main.exe
Run Code Online (Sandbox Code Playgroud)
效果很好。
现在我准备将其打包到静态库中。做如下:
gcc -c renderay_core.c renderay_shapes.c
Run Code Online (Sandbox Code Playgroud)
现在我已经准备好将对象链接为库。
ar rcs librenderay.a renderay_core.c renderay_shapes.c
Run Code Online (Sandbox Code Playgroud)
是我为此使用的命令。然后我尝试使用库而不是纯源文件来编译 test.c。
gcc test.c -o main.exe -static -L -lrenderay
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试编译它时,我收到错误警告:
对“new_Canvas”的未定义引用
告诉我链接到库失败。我在这里做错了什么?我错过了什么?
编译 - 不链接 - 源文件
gcc -c renderay_core.c -o renderay_core.o
gcc -c renderay_shapes.c -o renderay_shapes.o
Run Code Online (Sandbox Code Playgroud)
然后打包
ar -rcs librenderay.a renderay_core.o renderay_shapes.o
Run Code Online (Sandbox Code Playgroud)
并使用链接到它
gcc test.c -o main.exe -static -L. -lrenderay
Run Code Online (Sandbox Code Playgroud)
您需要L在此处指定非标准位置 - 当前目录。