SWIG Perl 接口产生未定义的符号

问题描述 投票:0回答:1

我有一些 C 代码,我试图从 Perl 访问。只需几个非常简单的调用,初始化

ml_init(int)
,发送二进制数组的调用,对其进行操作的调用,以及关闭的调用。这是在 rPi (Linux) 上,我使用 swig 来构建中间文件。

包装文件被制作为

.cpp
文件,生成的
.o
文件包含在链接行中。

一切似乎都编译和链接得很好,但是当我运行我的测试 Perl 应用程序时,我得到

undefined symbol: _Z7ml_initi
。 我在生成的
nm
文件上使用了
.so
,并且
ml_init
列出了十六进制值和
T
。 然而,类型安全的损坏名称(这是错误中出现的名称)也被列出,但它前面有一个
U
nm
的手册页指出这意味着该符号“未定义”。

嗯?

如果它存在于文件中,那就意味着它已被定义,对吗?它怎么可能存在,但没有定义给链接器?

c++ c perl linker swig
1个回答
1
投票

我终于解决了这个问题,耶!

我一直在通过修改

Makefile.PL
并使用
make
make install
来构建。 我不再确切地记得我是如何创建原始 _wrap.cxx 文件的,它肯定是通过
swig
.

无论如何,我只是对现有的 .i 文件做了一个

swig -perl
,这次它创建了一个 .c 包装器。 我破解了
Makefile
,用 .c 替换 .cxx 扩展名,现在我们已经解决了 Perl 错误,我们正在进入 C 代码。

© www.soinside.com 2019 - 2024. All rights reserved.