构建 php 扩展时未定义的引用
Undefined reference when build a php extension
我正在尝试为 PHP 创建自定义会话处理程序。
(我没有找到关于此的明确文档。如果你有好的 links,我会很乐意阅读它;))
所以当我尝试使用像 zend_string_init
这样的 zend 函数时
例子
PS_READ_FUNC(mongo)
{
MongoClient *pMongoClient = static_cast<MongoClient*>(PS_GET_MOD_DATA());
if(pMongoClient == nullptr)
return FAILURE;
std::string strSessionId = (char *)key;
std::string strSessionData = pMongoClient->read(strSessionId);
*val = zend_string_init(strSessionData.c_str(), strSessionData.size(), true); //generate a unreference error on __zend_malloc and _emalloc
return SUCCESS;
}
为了构建我的 linker 依赖列表,我在我的 makefile
中使用了这些行
PHP_LINKER_DEPENDENCIES = $(shell php-config --libs)
> php-config --libs
-lcrypt -lresolv -lcrypt -lz -lpcre -lrt -lm -ldl -lnsl -lxml2 -lssl -lcrypto -lcrypt -lcrypt
linking 命令有错误
g++ -L/usr/lib/php/20151012 -L/usr/lib/x86_64-linux-gnu -o session_storage.so main.o -lcrypt -lresolv -lcrypt -lz -lpcre -lrt -lm -ldl -lnsl -lxml2 -lssl -lcrypto -lcrypt -lcrypt -L/usr/local/lib -lsasl2 -lssl -lcrypto -lrt -lmongoc-1.0 -lbson-1.0 -lphpcpp
session_storage.o: dans la fonction « zend_string_alloc »:
/usr/include/php/20151012/Zend/zend_string.h:121: référence indéfinie vers « __zend_malloc »
/usr/include/php/20151012/Zend/zend_string.h:121: référence indéfinie vers « _emalloc »
所以我没有找到我需要 link 的库。
编辑重复问题:
我想,这不是一个重复的问题。相关问题是关于“未定义引用的错误是什么...”。
我知道这是什么错误了。我只是找不到 link 需要的库。它可能是 zend 引擎的一部分,但我不确定。
我发现了问题。我像可执行文件一样构建我的项目,但 PHP 需要一个库,所以...。将 -shared
添加到我的构建选项可解决问题。
感谢您的帮助
我正在尝试为 PHP 创建自定义会话处理程序。 (我没有找到关于此的明确文档。如果你有好的 links,我会很乐意阅读它;))
所以当我尝试使用像 zend_string_init
这样的 zend 函数时
例子
PS_READ_FUNC(mongo)
{
MongoClient *pMongoClient = static_cast<MongoClient*>(PS_GET_MOD_DATA());
if(pMongoClient == nullptr)
return FAILURE;
std::string strSessionId = (char *)key;
std::string strSessionData = pMongoClient->read(strSessionId);
*val = zend_string_init(strSessionData.c_str(), strSessionData.size(), true); //generate a unreference error on __zend_malloc and _emalloc
return SUCCESS;
}
为了构建我的 linker 依赖列表,我在我的 makefile
中使用了这些行PHP_LINKER_DEPENDENCIES = $(shell php-config --libs)
> php-config --libs
-lcrypt -lresolv -lcrypt -lz -lpcre -lrt -lm -ldl -lnsl -lxml2 -lssl -lcrypto -lcrypt -lcrypt
linking 命令有错误
g++ -L/usr/lib/php/20151012 -L/usr/lib/x86_64-linux-gnu -o session_storage.so main.o -lcrypt -lresolv -lcrypt -lz -lpcre -lrt -lm -ldl -lnsl -lxml2 -lssl -lcrypto -lcrypt -lcrypt -L/usr/local/lib -lsasl2 -lssl -lcrypto -lrt -lmongoc-1.0 -lbson-1.0 -lphpcpp
session_storage.o: dans la fonction « zend_string_alloc »:
/usr/include/php/20151012/Zend/zend_string.h:121: référence indéfinie vers « __zend_malloc »
/usr/include/php/20151012/Zend/zend_string.h:121: référence indéfinie vers « _emalloc »
所以我没有找到我需要 link 的库。
编辑重复问题:
我想,这不是一个重复的问题。相关问题是关于“未定义引用的错误是什么...”。
我知道这是什么错误了。我只是找不到 link 需要的库。它可能是 zend 引擎的一部分,但我不确定。
我发现了问题。我像可执行文件一样构建我的项目,但 PHP 需要一个库,所以...。将 -shared
添加到我的构建选项可解决问题。
感谢您的帮助