在 C 中创建共享库,sqlite3 的问题

标签 c sqlite shared-libraries swi-prolog

我第一次尝试创建一个共享库以将其与 SWI-Prolog 外部函数接口(interface)一起使用,但我无法正确链接 sqlite3。我实际上是这样做的:

gcc -c -fpic task_resources.prolog.c -I/usr/lib/swi-prolog/include/ -lsqlite3
gcc -shared -o task_resources.so task_resources.prolog.o
cp /home/markmb/task_resources.so /usr/lib/swi-prolog/lib/amd64/task_resources

然后我有一个虚拟序言文件:

dbg_task_resources :- 
   use_foreign_library(foreign(task_resources)),
   getTaskState("id01",Result),
   write(Result).

在 prolog 解释器中,我调用文件和仿函数:

[prueba].
dbg_task_resources.

我得到了结果:

prolog: symbol lookup error: /usr/lib/swi-prolog/lib/amd64/task_resources: undefined symbol: sqlite3_open

那我应该如何链接sqlite3呢?

最佳答案

正如 Collin 所说,我在第二个 gcc 语句中需要 -sqlite3:

gcc -shared -o task_resources.so task_resources.prolog.o -lsqlite3

抱歉,这个问题很简单,但这是一个具体问题,我无法通过 Google 找到解决方案

再次感谢科林

关于在 C 中创建共享库,sqlite3 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15099384/

相关文章:

c - 程序检查给定数字是否存在于所有数字按升序排列的数组中

c - Makefile 说明 : files that includes headers which includes another header

objective-c - 数据库连接代码,Xcode 4和Sqlite3中的错误

android - onCreate() 不被 getWritableDatabase() 调用

performance - 具有 max() 性能的 SQLite SELECT

shared-libraries - 错误包括 petalinux 中的共享预构建库

c++ - CMake - 链接错误和 undefined reference

c - 写入通过结构传递给线程的 mmap 输出 (C)

python - 我是否需要 SWIG 类型映射才能让 c 函数将 float 返回给 python?

android - 如何在构建过程中从 .so 文件中删除符号