我第一次尝试创建一个共享库以将其与 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/