Firefox NPAPI Xcode链接错误 [英] Firefox NPAPI Xcode link errors
问题描述
我试图为Mac OSX构建一个Firefox插件,但它构建得很好,但是我不明白为什么链接器失败了。
这里是日志
未定义的符号:
_NPN_ReleaseVariantValue,引用自:
npp_gate.o中的_NPP_New
_NPP_New in npp_gate.o
_NPN_MemAlloc,引用自:
plugin.o中的String2Variant(_NPVariant *,char const *)
_NPN_GetValue,引用来自:
_NPP_New in npp_gate.o
_NPN_ReleaseObject,引用自:
插件中的CPlugin ::〜CPlugin()
CPlugin ::〜plugin.o中的CPlugin()
_NPN_Version引用自:
plugin.o中的CPlugin :: CPlugin(_NPP *)
plugin.o中的CPlugin :: CPlugin(_NPP *)
_NPN_UserAgent来自:
plugin.o中的CPlugin :: CPlugin(_NPP *)
plugin.o中的CPlugin :: CPlugin(_NPP *)
_NPN_GetProperty,引用自:
_NPP_New在npp_gate.o
_NPP _New in npp_gate.o
_NPN_GetURL,引用来自:
_NPP_New in npp_gate.o
CPluginData :: Fire_OnZoomChange()in CTPlugin.o
CPluginData :: Fire_OnPIPMove()in CTPlugin.o
CTPlugin.o中的CPluginData :: Fire_OnItem(int,bool)
CTPlugin.o中的CPluginData :: Fire_OnClose(char const *)
CTPlugin中的CPluginData :: Fire_OnWheel(int) .o
CTPlugin.o中的CPluginData :: Fire_OnRightClick(int,int)CTPlugin.o中的
CPluginData :: Fire_OnKeyPress(无符号短)在CTPlugin中,
CPluginData :: Fire_OnMouseDn(int,int) .o
CTPlugin.o中的CPluginData :: Fire_OnMouseUp(int,int)
CTPlugin.o中的CPluginData :: Fire_OnMouseMove(int,int)
CPluginData :: Fire_OnClick(int,int)in CTPlugin.o
CTPlugin.o中的CPluginData :: Fire_OnSelect()CTPlugin.o中的
CPluginData :: Fire_OnStatus(char const *)
CPluginData :: Fire_OnImage(int,int,int,int )在CTPlugin.o
_NPN_CreateObject ,引用自:
plugin.o中的CPlugin :: GetScriptableObject()
_NPN_GetStringIdentifier,引用自:
_NPP_New in npp_gate.o
_NPP_New in npp_gate.o
plugin.o中的CPlugin :: CPlugin(_NPP *)$ plugin.o中的
CPlugin :: CPlugin(_NPP *)
plugin.o中的CPlugin :: CPlugin(_NPP *)
plugin.o中的CPlugin :: CPlugin(_NPP *)$ plugin.o中的
CPlugin :: CPlugin(_NPP *)
plugin.o中的CPlugin :: CPlugin(_NPP *)
_NPN_InvalidateRect ,引用自:
CPluginData :: Refresh(bool)in CTPlugin.o
_NPN_RetainObject,引用自:
plugin.o中的CPlugin :: GetScriptableObject()
我真的不明白我做了什么坏事!
我错过了图书馆链接?在此先感谢=)
编辑:添加代码示例,从plugin.o中的String2Variant的_NPN_MemAlloc:
static void String2Variant(NPVariant * result,LPCTSTR value)
{
if(value)
{
ClassUnicode cu;
char * utf8String = cu.CurrentModeToUTF8(value);
uint32 len =(uint32)strlen(utf8String);
char * clone =(char *)NPN_MemAlloc(len + 1);
memcpy(clone,utf8String,len);
clone [len] ='\0';
} else
{
result-> type = NPVariantType_String;
result-> value.stringValue.UTF8Characters = NULL;
result-> value.stringValue.UTF8Length = 0;
$ / code $ / pre
解决方案是没有提供
NPN_MemAlloc
的库,它实际上是您在浏览器调用NP_Initialize
。您需要存储aNPNFuncs
参数,以便以后使用它:
static NPNetscapeFuncs * sBrowserFuncs;
NPError NP_Initialize(NPNetscapeFuncs * aNPNFuncs,NPPluginFuncs * aNPPFuncs)
{
//理智检查到这里
sBrowserFuncs = aNPNFuncs;
$ / code>当您需要调用
NPN_MemAlloc $ c
sBrowserFuncs-> memalloc(len + 1);
或者你实际上定义了函数
NPN_MemAlloc
测试插件的方式:
void *
NPN_MemAlloc(uint32_t size)
{
return sBrowserFuncs-> memalloc(大小);
}
I'm trying to build a Firefox plugin for Mac OSX, it build well but I don't understand why the linker failed.
Here is the log of the linker:
Undefined symbols: "_NPN_ReleaseVariantValue", referenced from: _NPP_New in npp_gate.o _NPP_New in npp_gate.o "_NPN_MemAlloc", referenced from: String2Variant(_NPVariant*, char const*)in plugin.o "_NPN_GetValue", referenced from: _NPP_New in npp_gate.o "_NPN_ReleaseObject", referenced from: CPlugin::~CPlugin()in plugin.o CPlugin::~CPlugin()in plugin.o "_NPN_Version", referenced from: CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o "_NPN_UserAgent", referenced from: CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o "_NPN_GetProperty", referenced from: _NPP_New in npp_gate.o _NPP_New in npp_gate.o "_NPN_GetURL", referenced from: _NPP_New in npp_gate.o CPluginData::Fire_OnZoomChange() in CTPlugin.o CPluginData::Fire_OnPIPMove() in CTPlugin.o CPluginData::Fire_OnItem(int, bool)in CTPlugin.o CPluginData::Fire_OnClose(char const*)in CTPlugin.o CPluginData::Fire_OnWheel(int) in CTPlugin.o CPluginData::Fire_OnRightClick(int, int)in CTPlugin.o CPluginData::Fire_OnKeyPress(unsigned short)in CTPlugin.o CPluginData::Fire_OnMouseDn(int, int)in CTPlugin.o CPluginData::Fire_OnMouseUp(int, int)in CTPlugin.o CPluginData::Fire_OnMouseMove(int, int)in CTPlugin.o CPluginData::Fire_OnClick(int, int)in CTPlugin.o CPluginData::Fire_OnSelect() in CTPlugin.o CPluginData::Fire_OnStatus(char const*)in CTPlugin.o CPluginData::Fire_OnImage(int, int, int, int)in CTPlugin.o "_NPN_CreateObject", referenced from: CPlugin::GetScriptableObject() in plugin.o "_NPN_GetStringIdentifier", referenced from: _NPP_New in npp_gate.o _NPP_New in npp_gate.o CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o CPlugin::CPlugin(_NPP*)in plugin.o "_NPN_InvalidateRect", referenced from: CPluginData::Refresh(bool) in CTPlugin.o "_NPN_RetainObject", referenced from: CPlugin::GetScriptableObject() in plugin.o
I really don't understand what I've done bad! Have I missed libraries to link with? Thanks in advance =)
EDIT: Add code example, for the _NPN_MemAlloc from String2Variant in plugin.o:
static void String2Variant(NPVariant *result, LPCTSTR value) { if (value) { ClassUnicode cu; char *utf8String = cu.CurrentModeToUTF8(value); uint32 len = (uint32) strlen(utf8String); char *clone = (char *)NPN_MemAlloc(len+1); memcpy(clone,utf8String,len); clone[len] = '\0'; } else { result->type = NPVariantType_String; result->value.stringValue.UTF8Characters = NULL; result->value.stringValue.UTF8Length = 0; } }
解决方案There is no library that provides
NPN_MemAlloc
, it is actually one of the callbacks that you get when the browser callsNP_Initialize
. You need to store theaNPNFuncs
parameter so that you can use it later:static NPNetscapeFuncs *sBrowserFuncs; NPError NP_Initialize(NPNetscapeFuncs *aNPNFuncs, NPPluginFuncs *aNPPFuncs) { // Sanity checks go here sBrowserFuncs = aNPNFuncs; }
When you need to call
NPN_MemAlloc
you do it like this:sBrowserFuncs->memalloc(len+1);
Or you actually define the function
NPN_MemAlloc
, the way the test plugin does it:void* NPN_MemAlloc(uint32_t size) { return sBrowserFuncs->memalloc(size); }
这篇关于Firefox NPAPI Xcode链接错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!