【问题标题】:Interface from C-Programm in XCode to SWI-Prolog从 XCode 中的 C 程序到 SWI-Prolog 的接口
【发布时间】:2012-11-27 11:17:29
【问题描述】:

我想在 MAC OS X 下使用 XCode IDE 从 c 代码接口到 SWI-Prolog。

我已包含头文件并使用以下示例代码:

#include <stdio.h>
#include <SWI-Prolog.h>
#include <SWI-Stream.h>

int main(int argc, const char * argv[])
{

char *av[10];
int ac = 0;

av[ac++] = "/opt/local/lib/swipl-6.2.2/bin/i386-darwin12.2.1/swipl";
av[ac++] = "-x";
av[ac++] = "mystate";
av[ac]   = NULL;

#ifdef READLINE /* Remove if you don't want readline */
PL_initialise_hook(install_readline);
#endif

if ( !PL_initialise(ac, av) )
    PL_halt(1);

PL_halt(PL_toplevel() ? 0 : 1);


printf("done...\n");
return 0;
}

我还在构建设置中链接到头文件和库路径:

头文件搜索路径:/opt/local/lib/swipl-6.2.2/include

库搜索路径:/opt/local/lib/swipl-6.2.2/lib/i386-darwin12.2.1

但在运行代码时出现以下错误:

Undefined symbols for architecture x86_64:
  "_PL_halt", referenced from:
      _main in main.o
  "_PL_initialise", referenced from:
      _main in main.o
  "_PL_toplevel", referenced from:
       _main in main.o
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

有人可以帮助我运行我的代码吗?

在此先感谢和亲切的问候

索利克

【问题讨论】:

  • i386 与 x86_64 不匹配?
  • hmm 这是 MAC OS X 的安装文件...但也许我应该尝试在我的 Mac 上自己编译 swi-prolog...谢谢您的提示,我会试一试...但另一方面:从终端运行 swi-prolog 工作正常且没有问题...
  • 关于架构 x86_64 的 ld 警告...似乎配置错​​误
  • 嗯,这可能是问题所在...我使用 MAC 网站上的预编译版本,从控制台运行 swi 工作正常。也许这些库仅在 MAC 上编译为 32 位?

标签: c xcode macos swi-prolog


【解决方案1】:

即使您在设置中设置了正确的路径,它也不会自动找到要链接的正确库。您还必须添加实际的库。

【讨论】:

  • 感谢您的提示。但是哪个库和链接到哪里? lib目录下有很多*.dylib文件...
【解决方案2】:

我在 Ubuntu 中工作(是的,仍然在 Windows 中),我开始感谢 pkg-config 的支持。

如果您已经习惯了,请注意,在本地编译时,SWI-Prolog 会生成一个目录 ~/lib/pkgconfig。

然后您可以将该目录添加到 pkg-config 配置中,并使用具有(恕我直言)良好支持的 SW。

【讨论】:

  • 嗨,不,我使用的是预编译版本。问题在于 XCode 的 makefile 不同(和图形:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多