Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >集成SWI和C++的问题

集成SWI和C++的问题
EN

Stack Overflow用户
提问于 2016-03-14 22:28:53
回答 1查看 350关注 0票数 2

我正在尝试集成Prolog和C++。我使用SWI作为Prolog,Embarcadero Rad Studio用于C++。我想在C++中输入,在Prolog中处理输入,并在C++中显示输出。

首先,它给出了“无法执行链接”错误,但是在链接库之后,它给出了错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ILINK32 Error] Error: 'C:\PROGRAM FILES
(X86)\SWIPL\LIB\LIBSWIPL.LIB' contains invalid OMF record, type 0x21
(possibly COFF)

我搜索并找到了使用implib.exe解析它的方法,并创建了一个新的库newlibswipl.lib

在程序中链接它之后,它会给出以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[ILINK32 Error] Error: Unresolved external '_PL_cut_query' referenced
from C:\USERS\DOCUMENTS\RAD STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ
[ILINK32 Error] Error: Unresolved external '_PL_new_term_ref'
referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_exception' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_fatal_error' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_chars_to_term' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_put_term' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_predicate' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_open_query' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_next_solution' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_get_arg' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_get_name_arity' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unresolved
external '_PL_atom_chars' referenced from C:\USERS\DOCUMENTS\RAD
STUDIO\PROJECTS\DEBUG\NEWPROLOG.OBJ [ILINK32 Error] Error: Unable to
perform link

C++代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// newprolog.cpp

#include <math.h>
#include <iostream>
#include <sstream> 
#include "SWI-cpp.h"
#include "SWI-Prolog.h"
#include "SWI-Stream.h"

#pragma comment(lib,"C:\Program Files (x86)\swipl\lib\newlibswipl.lib");
using namespace std;

term_t a; 
term_t b;
term_t ans;
functor_t fun;

int main()
{
  int digit;
  cout << "\nPlease enter a digit to calculate it's Factorial.." << endl;
  cin >> digit;
  PlCall("consult(swi('C:\Program Files(x86)\swipl\swipl-win.rc'))"); 
  PlCall("consult('factorial.pl')");
  a = PL_new_term_ref();
  PL_put_integer(a, digit);
  b   = PL_new_term_ref();
  ans = PL_new_term_ref();
  fun = PL_new_functor(PL_new_atom("factorial"),2);
  PL_cons_functor(ans, fun, a, b);
  int fact;
  if(PL_call(ans, NULL)) {
    PL_get_integer(b, &fact);
    //int numb = fact;
  }
  return 0;
}

factorial.pl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
factorial(1, 1) :- !.
factorial(X, Fac) :-
  X > 1,
  Y is X - 1,
  factorial(Y, New_Fac),
  Fac is X * New_Fac.

实际上,我是从youtube视频中引用的,在视频中,这个人使用的是QT创建者而不是Rad Studio。链接是Swi-Prolog与QT Creator C++接口,但我想使用Embarcadero进行链接。有人能帮帮我吗.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-16 20:51:48

谢谢大家的建议。我找到了将SWI库与Embarcadero Rad Studio链接的解决方案。

解决方案:

  1. 我使用命令提示符中的implib.exe将SWI库libswipl.dll转换为COFF格式库,因为库是OMF格式的,所需的格式是COFF格式。
  2. 在获得SWI库的COFF版本后,我将其复制到Embarcadero的Project文件夹中,并将其包含在项目中。

此包含解决了链接错误并执行了项目。

谢谢大家的建议。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36004132

复制
相关文章
C++ 栈和典型的迷宫问题
栈是一种受限的数据结构,要求在存储数据时遵循先进后出(Last In First Out)的原则。可以把栈看成只有一个口子的桶子,进和出都是走的这个口子(也称为栈顶),封闭的另一端称为栈底。
一枚大果壳
2022/12/20
7610
C++  栈和典型的迷宫问题
WordPress和WHMCS集成的问题和解决方案
站长最近一直在折腾WordPress和WHMCS的整合,到目前为止,已经踩过不少坑,记录一下。
星哥玩云
2022/08/13
9700
WordPress和WHMCS集成的问题和解决方案
C++中输出流的刷新问题和 endl和 \n的区别
《C++ Primer》第5版 P6中提到endl具有换行和刷新输出流两个作用,那么没有 endl是否还会将输出流中的内容输出到设备中,再刷新输出流呢? 1 cout << "The test"; 2 cout << "The test is over!" << endl; 在第2行前加入断点调试,程序输出显示 The test,说明没有 endl,也还是会刷新输出流。 继续运行程序,输出显示 The testThe test is over!。说明在这个例子中,endl只体现出了换行的作用。会不会是书上说
用户1653704
2018/06/07
2.3K0
集成模型的五个基础问题
引言 如果你曾经参加过数据科学竞赛,你一定意识到集成模型(Ensemble Modeling)举足轻重的作用。事实上,集成模型提供了最有说服力的方式之一,来建立高度精确的预测模型。Bagging和Boosting算法进一步加强了这一方法的精确性。 所以,你下次构建预测模型的时候,考虑使用这种算法吧。你肯定会赞同我的这个建议。如果你已经掌握了这种方法,那么太棒了。我很想听听你在集成模型上的经验,请把你的经验分享在下面的评论区。 对于其他人,我将会分享一些集成模型中常见的问题。如果你想评估一个人对集成模型方面的
用户1737318
2018/06/05
1.7K0
Mesos和Docker的集成
因为Docker本身想管理整个容器,从chroot、命名空间到整个命名空间的cgroup,它会和默认的Mesos容器发生冲突。因此,Mesos添加了容器机的支持,一种可插拔的机制,让Mesos的容器机子系统可扩展:最初Mesos的基于 LXC/cgroup的容器被引入到容器机API里,Docker是添加的第一个新的容器机,现在也有了全面的文档协议,介绍如何添加新的容器机,比如KVM虚拟机。
博文视点Broadview
2020/06/11
8740
集成模型的五个基础问题
引言 如果你曾经参加过数据科学竞赛,你一定意识到集成模型(Ensemble Modeling)举足轻重的作用。事实上,集成模型提供了最有说服力的方式之一,来建立高度精确的预测模型。Bagging和Boosting算法进一步加强了这一方法的精确性。 所以,你下次构建预测模型的时候,考虑使用这种算法吧。你肯定会赞同我的这个建议。如果你已经掌握了这种方法,那么太棒了。我很想听听你在集成模型上的经验,请把你的经验分享在下面的评论区。 对于其他人,我将会分享一些集成模型中常见的问题。如果你想评估一个人对集成模型方面的
CSDN技术头条
2018/02/11
6580
集成模型的五个基础问题
【C++】算法集锦(8):从两数和问题拓展到一百数和问题
给定一个数组,以及一个数,从数组里随即找两个数加起来等于给定的那个数。 找出每组符合条件的数(不可重复)。
看、未来
2021/09/18
2540
移动直播集成问题
一旦设置了码率,调用setVideoQuality:adjustBitrate:adjustResolution(推荐这个方法)
rkChen
2020/09/06
3.7K1
数据结构——无权图的路径问题(C++和java实现)
好像又是接近半个月没有更新,这半个月忙着结婚的各项事情,本来预计的学习任务也拖拖拉拉,进度缓慢。吐槽一句,拍婚纱照真的是最非常非常累的一件事情,不想再有下次了。
Originalee
2018/08/30
6410
Unity 和 Android 的工程集成
有时候,我们需要在 Unity 里调用一些 Android 的功能,这些功能在 Unity 中可能并没有提供接口,需要在 Android 平台上实现。此时,我们需要有一个方法来让 Android 代码和 Unity 代码互调用。这里记录一下操作方法,并提供一个工具来简化两个工程之间的集成流程。
zhiruili
2023/10/20
6080
Unity 和 Android 的工程集成
【Seata】seata的部署和集成
首先我们要下载seata-server包,地址在http://seata.io/zh-cn/blog/download.html
陶然同学
2023/10/14
5200
【Seata】seata的部署和集成
shiro 和 spring boot 的集成
使用 shiro-spring-boot-web-starter 在 spring boot 中集成 shiro 只需要再添加一个依赖
Carlos Ouyang
2019/08/19
1.9K0
shiro 和 spring boot 的集成
13.9 SpringBoot集成Swagger2中遇到的问题13.9 SpringBoot集成Swagger2中遇到的问题
我们在使用SpringBoot集成Swagger2中,访问:http://127.0.0.1:8188/swagger-ui.html
一个会写诗的程序员
2018/08/20
2.5K0
13.9 SpringBoot集成Swagger2中遇到的问题13.9 SpringBoot集成Swagger2中遇到的问题
实现WCF和Unity 的集成
Artech 已经写过一篇[原创]WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成,在这个解决方案中Unity的侵入性有点强,本文介绍一种具有更少的侵入性的解决方案。 第一步:创建一个自定义的InstanceProvider 来处理WCF服务。 InstanceProvider就是用于创建或者提供service instance的。除了提供service instance的创建者或者提供者的身份外,InstanceProvi
张善友
2018/01/19
9240
13.12 Spring Boot集成Security中遇到的问题13.12 Spring Boot集成Security中遇到的问题问题1:Spring Boot集成Security使用数据库用户角色
13.12 Spring Boot集成Security中遇到的问题 问题1:Spring Boot集成Security使用数据库用户角色权限用户名问题 问题描述 代码 package com.springboot.in.action.dao import java.util.List import com.springboot.in.action.entity.User import org.springframework.data.jpa.repository.Query import org.spr
一个会写诗的程序员
2018/08/20
1.3K0
C++多重继承的指针问题
首先,可以看到&oD和pB1指针指向相同的存储地址。为什么? 这是因为当我们new一个Derive类的时候,计算机给Derive类分配的空间可以分为三部分:首先是类Base1的部分,然后是Base2的部分,然后是Derive中除去Base和Base2剩余部分,如下图。
卡尔曼和玻尔兹曼谁曼
2019/01/22
8810
C++多重继承的指针问题
C++ 中的#,##,和"
查看 PE 文件的常量字符串段,发现经过编译器优化后只存在一个Hello,World!串。
零式的天空
2022/03/08
6930
C++ 中的#,##,和"
C++ 中的#,##,和"
查看 PE 文件的常量字符串段,发现经过编译器优化后只存在一个Hello,World!串。
mzlogin
2020/04/16
8230
C++ 中的#,##,和"
springboot集成themleft ControllerAdvice异常问题
今天写了一个小的项目,在使用到Controller的时候总是没有办法讲我想要的数据返回给前端,显示模板引擎加载异常,后来查阅资料发现我使用的是
blueflyming
2021/05/20
5601
springboot集成themleft ControllerAdvice异常问题
点击加载更多

相似问题

SWI-Prolog与C++接口的问题

24

prolog SWI shell问题

12

回溯问题SWI-Prolog

16

SWI-Prolog C++接口

10

swi_prolog调用c++程序

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文