我正在尝试在OS X 10.10.2上构建和安装SWIG生成的perl API。 (它是FreeLing 3.1语言分析工具包的。)我已生成并编译了SWIG文件,生成freeling.so
。
但是当我在perl脚本中尝试use freeling
时,我收到错误:
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包lib)中定义。 (nm -U证实了这一点:_boot_freeling
在freeling.so中定义;我假设前导下划线只是目标文件格式的一部分。)
我确保freeling.so出现在LD_LIBRARY_PATH中的libfreeling.dylib之前。我还尝试将freeling.so的路径卸到@DynaLoader :: dl_library_path。
我怀疑这不是路径问题,而是关于为OS X构建的东西。过去,我已经在Ubuntu上构建了它并且它工作正常。我已经调整了gcc选项(-bundle而不是-shared)。
其他信息:
perl -V:dlext => dlext='bundle';
构建SOso-0.01.patch.txt会产生:
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目标:
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
答案 0 :(得分:0)
好的,促进回答:)
你对perl -V:dlext
有什么看法?
当您编译此模块SOso-0.01.patch.txt时,在blib中创建了哪些文件?
嗯:)如果你的os / perl被配置为寻找freeling.bundle,我不认为它会试着看看freeling.so ....所以我试着做些什么...重命名文件以使用dlext