首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIG,perl,DynaLoader在OS上找不到boot_$Module

SWIG,perl,DynaLoader在OS上找不到boot_$Module
EN

Stack Overflow用户
提问于 2015-03-28 17:47:49
回答 1查看 263关注 0票数 1

我正试图在OSX10.10.2上构建并安装一个SWIG生成的perl。(它用于FreeLing 3.1语言分析工具包。)我已经生成并编译了SWIG文件,生成了freeling.so

但是,当我尝试在perl脚本中使用use freeling时,我会得到以下错误:

代码语言:javascript
复制
Can't find 'boot_freeling' symbol in /usr/local/lib/libfreeling.dylib at freeling.pm line 11.

但是boot_freeling应该在SWIG生成的freeling.so中定义,而不是在libfreeling.dylib ( FreeLing包库)中定义。(nm -U证实了这一点:_boot_freeling是用freeling.so定义的;我假设前面的下划线只是对象文件格式的一部分。)

我已经确保了freeling.so在libfreeling.dylib in LD_LIBRARY_PATH之前。我还尝试将通向freeling.so的路径移到@DynaLoader::dl_library_path上。

我怀疑这不是路径问题,而是一些为OS构建的问题。在过去,我在Ubuntu上构建了它,它运行得很好。我调整了gcc的选择(-bundle而不是-shared)。

更多信息:

代码语言:javascript
复制
perl -V:dlext => dlext='bundle';

构建SOso-0.01.patch.txt会产生:

代码语言:javascript
复制
blib
├── blib/arch
│   └── blib/arch/auto
│       └── blib/arch/auto/SOso
│           └── blib/arch/auto/SOso/SOso.bundle
├── blib/bin
├── blib/lib
│   ├── blib/lib/SOso.pm
│   └── blib/lib/auto
│       └── blib/lib/auto/SOso
├── blib/man1
├── blib/man3
└── blib/script

Makefile目标:

代码语言:javascript
复制
freeling.bundle: freeling_perlAPI.cxx
    g++ -v -bundle -o freeling.bundle freeling_perlAPI.cxx -lfreeling -lperl -lboost_system -I $(FREELINGDIR)/include -I $(BOOSTDIR)/include -I $(ICU4CDIR)/include -L $(FREELINGDIR)/libfreeling -I $(PERLDIR)/CORE -L $(LIBDIR) -L $(BOOSTDIR)/lib -L $(PERLDIR)/CORE -fPIC
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-01 00:25:54

好的,请回答:)

你对perl -V:dlext有什么好处?当您编译这个模块SOso-0.01.patch.txt时,在blib中创建了哪些文件?

如果您的os/perl配置为查找freeling.bundle,我不认为它会试图查看freeling.so .所以我试着做点什么.将文件重命名为使用dlext

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

https://stackoverflow.com/questions/29320496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档