PHP扩展加载错误
来源:互联网 发布:淘宝文案策划 编辑:程序博客网 时间:2024/05/22 13:20
在php.ini中加入编译好的c++扩展(使用了protobuf)后,重启php-fpm报错如下:
[root@iZ23eld3eqzZ baichuan]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm [libprotobuf ERROR google/protobuf/descriptor_database.cc:109] Symbol name "BidRequest" conflicts with the existing symbol "BidRequest".
[libprotobuf FATAL google/protobuf/descriptor.cc:954] CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
terminate called after throwing an instance of 'google::protobuf::FatalException'
what(): CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
/etc/init.d/php-fpm: line 50: 21303 Aborted $php_fpm_BIN --daemonize $php_opts
failed
在Linux上编译google protobuff时,configure 默认选项是生成动态库,即libprotobuf.so文件。如果同时在多个动态库(动态库以dlopen方式动态加载)中使用同一buff结构,则运行时会报错误:
ibprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: foo/foo.proto libprotobuf FATAL google/protobuf/descriptor.cc:862] CHECK failed: generated_database_->Add(encoded_file_descriptor, size): terminate called after throwing an instance of 'google::protobuf::FatalException' what(): CHECK failed: generated_database_->Add(encoded_file_descriptor, size):为了解决这个问题,google protobuff,则不能以动态库的形式调用,改用静态库的形式在编译时加载。
configrue --disable-shared
即可编译成静态库:libprotobuf.a 但是默认的configure文件中,在编译时未加-fPIC ,导致在引用静态库的工程中编译链接时报错误:
libs/assert.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC .libs/assert.o: could not read symbols: Bad value解决该问题,需要重新编译google protobuff库,并添加编译选项:-fPIC以文本形式打开google buff代码目录下的configure文件,在把第2575至2578行修改为如下:if test "x${ac_cv_env_CFLAGS_set}" = "x"; then : CFLAGS="-fPIC" fi if test "x${ac_cv_env_CXXFLAGS_set}" = "x"; then : CXXFLAGS="-fPIC"再次执行configure:configrue --disable-sharedmakemake install编译完成后,使用libprotobuf.a文件,以上问题解决。解决方法:
php.ini中加载了两个扩展,都是使用了protobuf的同类扩展,把一个注释掉,只使用一个,问题解决。
- PHP扩展加载错误
- 记PHP安装报扩展无法加载的错误
- php加载mssql扩展
- php扩展无法加载问题
- c++扩展PHP编译错误
- 测试PHP扩展运行错误
- php yar扩展json错误
- 关于PHP自定义扩展加载的问题
- 判断php扩展库是否加载
- php中mysqli扩展无法加载
- php扩展php_curl.dll不加载解决方法
- 关于PHP自定义扩展加载的问题
- 运行时加载PHP扩展的函数
- 关于PHP自定义扩展加载的问题
- php扩展开发(加载不同配置文件)
- centos php加载mysql扩展实现方法
- php不能加载mssql扩展解决办法
- PHP加载Redis扩展(Linux)
- text-decoration:none; 为什么不生效
- 《打印行号以及显示行数的不同方法头脑风暴及实践》
- c++第一次试验
- 图形的绘制
- c++第一次实验
- PHP扩展加载错误
- 内核开发时应该注意的点
- 19 Remove Nth Node From End of List
- 迪杰斯特拉(dijkstra)算法详解
- BitmapFactory.Options详解
- MotionEvent和TouchSlop,;
- .ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to
- 不懂 POJ 3279-Fliptile【搜索】
- Linux运维工程师入门须掌握的10个技术点