Firefox NPAPI Xcode链接错误 [英] Firefox NPAPI Xcode link errors

查看:362
本文介绍了Firefox NPAPI Xcode链接错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图为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

  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 calls NP_Initialize. You need to store the aNPNFuncs 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆