我有一些 C 代码,我试图从 Perl 访问。只需几个非常简单的调用,初始化
ml_init(int)
,发送二进制数组的调用,对其进行操作的调用,以及关闭的调用。这是在 rPi (Linux) 上,我使用 swig 来构建中间文件。
包装文件被制作为
.cpp
文件,生成的 .o
文件包含在链接行中。
一切似乎都编译和链接得很好,但是当我运行我的测试 Perl 应用程序时,我得到
undefined symbol: _Z7ml_initi
。 我在生成的 nm
文件上使用了 .so
,并且 ml_init
列出了十六进制值和 T
。 然而,类型安全的损坏名称(这是错误中出现的名称)也被列出,但它前面有一个U
。 nm
的手册页指出这意味着该符号“未定义”。
嗯?
如果它存在于文件中,那就意味着它已被定义,对吗?它怎么可能存在,但没有定义给链接器?
我终于解决了这个问题,耶!
我一直在通过修改
Makefile.PL
并使用 make
和 make install
来构建。 我不再确切地记得我是如何创建原始 _wrap.cxx 文件的,它肯定是通过 swig
.
无论如何,我只是对现有的 .i 文件做了一个
swig -perl
,这次它创建了一个 .c 包装器。 我破解了 Makefile
,用 .c 替换 .cxx 扩展名,现在我们已经解决了 Perl 错误,我们正在进入 C 代码。