我正在使用php为我的php代码创建一个扩展,当我试图编译main.cpp文件的简单结构时,会出现一些奇怪的错误。
这是编译错误:
g++ -std=gnu++11 main.cpp
In file included from lib/phpcpp/phpcpp.h:39:0,
from main.cpp:122:
lib/phpcpp/type.h:32:1: warning: type attributes ignored after type is already defined [-Wattributes]
};
^
In file included from lib/phpcpp/phpcpp.h:60:0,
from main.cpp:122:
lib/phpcpp/classtype.h:31:1: warning: type attributes ignored after type is already defined [-Wattributes]
};
^
/tmp/cc0tI8mp.o: In function `get_module':
main.cpp:(.text+0x4c): undefined reference to `Php::Extension::Extension(char const*, char const*, int)'
main.cpp:(.text+0x65): undefined reference to `Php::Extension::~Extension()'
/tmp/cc0tI8mp.o: In function `Php::Extension::operator void*()':
main.cpp:(.text._ZN3Php9ExtensioncvPvEv[_ZN3Php9ExtensioncvPvEv]+0x14): undefined reference to `Php::Extension::module()'
collect2: error: ld returned 1 exit status 什么是/tmp/cctI8mp.o ??或者其他的?而我每次编译时,所提到的cctI8mp.o都会更改为另一个名称。
这是我试图编译的代码:
#include "lib/phpcpp/phpcpp.h"
/**
* tell the compiler that the get_module is a pure C function
*/
extern "C" {
int main(){}
PHPCPP_EXPORT void *get_module()
{
static Php::Extension bias("bias_framework_free", "0.9.3.20");
return bias;
}
} 偏见是我分机的名字。
发布于 2016-05-11 07:04:46
根据正式文件,您必须将二进制文件与-lphpcpp链接起来。示例Makefile包含以下行:
COMPILER_FLAGS = -Wall -c -O2 -std=c++11 -fpic -o
LINKER_FLAGS = -shared
LINKER_DEPENDENCIES = -lphpcpp因此,要正确构建扩展,编译器/链接器需要比在命令中传递的信息更多的信息。
考虑复制和修改示例Makefile。注意,为了使用Makefile构建扩展,必须运行make命令(默认情况下,该命令将查找当前目录中的makefile)。
https://stackoverflow.com/questions/37155054
复制相似问题