c - 用 C 语言构建静态库

标签 c gcc dll static

我想将两个源合并到一个 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/

相关文章:

c - 除以 2 的幂得到 float

c - 即使搜索目录正确,GCC 也无法找到 header

c - 在 MSVC 2010 项目中添加 .dll 文件的正确方法是什么

c - 为什么我无法在 C 中为我的结构创建新节点? (使用 Netbeans)

c++ - 字节顺序转换 C++

c - Enter E-100E 以太网卡所需的 RTL-8139 驱动程序 - 无法编译源文件

c - 我无法运行 ELF 格式的程序。shell 告诉我没有这样的文件或目录

c - GCC如何实现变长数组?

c++ - char* 在从 C DLL 返回到 js-ctypes 时丢失

c - apr_dso_load 加载 DSO 失败