当我 运行 这个非常基本的基于 SQLite3 的 C 文件时,为什么我一直得到 "Killed: 9"?

Why do I keep getting "Killed: 9" when I run this very basic SQLite3 based C file?

我有这个超级基本的 C 文件:

#include <sqlite3.h>
#include <stdio.h>

int main(void) {

    printf("%s\n", sqlite3_libversion()); 

    return 0;
}

在同一目录中,我从 the downloads page on sqlite.org 下载了 sqlite3.hsqlite3.csqlite3ext.h

我然后运行gcc -c main.c。然后chmod +x main.o。然后./main.o。每次我得到:

Killed: 9

我做错了什么?

您不能像那样直接执行可重定位目标文件。试试这个:

gcc main.c -o main -lsqlite3  

这适用于安装了 libsqlite3-dev 软件包的 Ubuntu。 运行 主要结果:

 3.8.2

-o标志指定可执行文件的名称。如果您省略 -o main,您将在大多数平台上使用 gcc 获得一个名为 a.out 的文件(也许 a.exe 在 windows+cygwin 上?)。无论哪种方式,该文件都已经是可执行文件,因此您可以跳过 chmod +x.

-lsqlite3 标志告诉编译器在 sqlite3 库中也 link。

如果您从头开始构建 sqlite3,您可能还需要 -I-L 标志来告诉编译器在哪里寻找库和头文件。

在您的命令中,“-c”标志跳过 linking 阶段并生成可重定位对象,否则,gcc 将生成可执行文件。

您可以使用 readelf -h main.o 使用原始命令的输出,使用 readelf -h main 使用我建议的命令的输出,或者仅使用 file main.ofile main 查看差异文件类型。