2011-09-05 7 views
0

Mac OSX 용 Firefox 플러그인을 빌드하려고하는데 잘 작성되었지만 링커가 실패한 이유를 모르겠습니다.Firefox NPAPI Xcode 링크 오류

여기 링커의 로그입니다 :

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 

정말 내가 나쁜 짓을했는지 이해가 안 돼요! 링크 할 라이브러리를 놓친 적이 있습니까? 미리 감사드립니다 =)

편집 :

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; 
     } 
    } 

답변

2

은 실제로 당신이 얻을 콜백 중 하나입니다 NPN_MemAlloc를 제공하는 더 라이브러리가 없습니다 : plugin.o에서 String2Variant에서 _NPN_MemAlloc를 들어, 코드 예제 추가 브라우저가 NP_Initialize을 호출하면.

static NPNetscapeFuncs *sBrowserFuncs; 

NPError NP_Initialize(NPNetscapeFuncs *aNPNFuncs, NPPluginFuncs *aNPPFuncs) 
{ 
    // Sanity checks go here 

    sBrowserFuncs = aNPNFuncs; 
} 

을 당신이 이런 식으로 할 NPN_MemAlloc를 호출해야하는 경우 :

sBrowserFuncs->memalloc(len+1); 

아니면 실제로 기능 NPN_MemAlloc을 정의, 당신이 나중에 사용할 수 있도록 당신은 aNPNFuncs 매개 변수를 저장해야 방법을 test plugin 않습니다 :

void* 
NPN_MemAlloc(uint32_t size) 
{ 
    return sBrowserFuncs->memalloc(size); 
} 
+0

도와 주셔서 감사합니다. 나는 다른 사람들이 할 수있는 일에 대해 접근해야만한다고 가정한다. 두 가지 솔루션의 차이점은 무엇입니까? 그리고 Firefox에서이 변경 사항이 발생하면 어떻게됩니까? 그것에 대한 링크가 있습니까? 다시 도움을 청하십시오 =) – unpythonicguy

+0

예, 다른 기능에 대해서도 똑같은 작업을 수행해야합니다. 테스트 플러그인에서 코드를 복사하는 것이 가장 쉽습니다. 두 가지 해결책 사이에는 실제적인 차이점이 없습니다. 두 번째 접근법은 단순히 다른 코드를 변경하지 않고 그대로 두는 것입니다 ('sBrowserFuncs-> memalloc'을 호출하는 대신 NPN_MemAlloc을 계속 호출 할 수 있습니다). 그리고 이것은 변함이 없었습니다. (http://www.podgoretsky.com/ftp/docs/Internet/Netscape%20Plug-Ins/ch8.htm을 참고하십시오.이 설명은 넷스케이프 ** 네비게이터에 대해 이야기합니다. ** 3.0은 고대 다). –

+0

알겠습니다. 고마워요. 이 플러그인이 xulrunner <1.8로 빌드 되었기 때문에 나는 변경 사항에 대해 질문했습니다. – unpythonicguy