【发布时间】:2012-09-18 01:05:14
【问题描述】:
我正在尝试使用 Visual Studio 2010 中的 swig 生成一个 dll 文件,我成功创建并编译了我的 wrapper.cpp 代码,并将每个库依赖项添加到我的项目中。现在,当我尝试使用 .dll 目标扩展构建项目的发布版本时,出现以下错误:
Generating non-SAFESEH image.
1>Ccrypto_wrap.obj : error LNK2019: unresolved external symbol "int __cdecl axtoi(char const *)" (?axtoi@@YAHPBD@Z) referenced in function __wrap_axtoi
这是连线的,因为 wrapper.cpp 中的所有其他外部符号都已解析,除了
axtoi!我的意思是,例如在我的 wrapper.cpp 中,我有 2 个引用 axtoi:
(1)
ZEND_NAMED_FUNCTION(_wrap_axtoi) { char *arg1 = (char *) 0 ; zval
**args[1]; int result;
SWIG_ResetError(); if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_array_ex(1, args) != SUCCESS) {
WRONG_PARAM_COUNT; }
/*@SWIG:C:\Users\user\Desktop\Ccrypto\Lib\php\utils.i,62,CONVERT_STRING_IN@*/
if ((*args[0])->type==IS_NULL) {
arg1 = (char *) 0;
} else {
convert_to_string_ex(args[0]);
arg1 = (char *) Z_STRVAL_PP(args[0]);
}
/*@SWIG@*/;
result = (int)axtoi((char const *)arg1);
{
ZVAL_LONG(return_value,result);
}
return;
fail:
SWIG_FAIL();
}
(2)
SWIG_ZEND_NAMED_FE(axtoi,_wrap_axtoi,NULL)
我在 Linux 中成功创建了我的班级的共享对象,并将它包含在我的 php 代码中并且它工作正常,所以我尝试在我的 Linux 共享对象中检查axtoi,我发现了一件奇怪的事情!当我在我的共享对象中 grep axtoi 时,我得到了:
U _Z5axtoiPKc
0006ccf1 T _wrap_axtoi
但对于所有其他符号,例如 itoax,其用法与我拥有的包装代码中的 axtoi 相同:
00093660 T _Z5itoaxi
0006e19f T _wrap_itoax
如上所述,我的 wrapper.cpp 代码中有几个与 axtoi 完全相同的符号,但我没有得到任何未解决的外部符号错误。有什么想法吗?
【问题讨论】:
-
axtoi听起来像是一个错字 - 你确定你没有输入它而不是atoi吗? -
是的,我没有输入任何东西,这个函数是 swig 生成的包装器代码函数之一,我的意思是 xxx_wrap.cpp。当我尝试从这个文件和我的类构建 dll 时,我得到了这个错误。
-
在没有任何来源或导致错误的步骤的情况下发布错误消息并不是很有用。
-
我编辑了我的问题并提供了更多细节,希望这次有人能帮助我
标签: visual-studio-2010 swig main php-extension