我正在尝试使用 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 代码中并且它工作正常,所以我尝试axtoi
在 Linux 中签入我的共享对象,我发现了一件奇怪的事情!axtoi
当我在我的共享对象中grep 时,我得到:
U _Z5axtoiPKc
0006ccf1 T _wrap_axtoi
但是对于所有其他符号,例如,它的用法与我在包装器代码中的itoax
用法相同:axtoi
00093660 T _Z5itoaxi
0006e19f T _wrap_itoax
我有几个类似的符号,它们的使用与上面提到的 wrapper.cpp 代码中的完全相同axtoi
,但是我没有得到任何未解决的外部符号错误。有任何想法吗?