SWIG、perl、DynaLoader 在 OS X 上找不到 boot_$Module
SWIG, perl, DynaLoader can't find boot_$Module on OS X
我正在尝试在 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 包库)中定义。 (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
好的,促进回答:)
perl -V:dlext
你能得到什么?
当你编译这个模块时 SOso-0.01.patch.txt 在 blib 中创建了哪些文件?
嗯 :) 如果您的 os/perl 配置为查找 freeling.bundle,我认为它不会尝试查看 freeling.so .... 所以我会尝试做一些事情......重命名文件以使用 dlext
我正在尝试在 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 包库)中定义。 (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
好的,促进回答:)
perl -V:dlext
你能得到什么?
当你编译这个模块时 SOso-0.01.patch.txt 在 blib 中创建了哪些文件?
嗯 :) 如果您的 os/perl 配置为查找 freeling.bundle,我认为它不会尝试查看 freeling.so .... 所以我会尝试做一些事情......重命名文件以使用 dlext