当我 运行 这个非常基本的基于 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.h
、sqlite3.c
和 sqlite3ext.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.o
和 file main
查看差异文件类型。
我有这个超级基本的 C 文件:
#include <sqlite3.h>
#include <stdio.h>
int main(void) {
printf("%s\n", sqlite3_libversion());
return 0;
}
在同一目录中,我从 the downloads page on sqlite.org 下载了 sqlite3.h
、sqlite3.c
和 sqlite3ext.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.o
和 file main
查看差异文件类型。