Связь с XulRunner v.34 для создания расширения XPCOM для Firefox

0

Я использую последний SDK Gecko (xulrunner-34.0.5.en-US.win32.sdk) с MSVS 2013, и у меня возникают серьезные проблемы с компоновщиком (и, видимо, я не единственный).

После многих обходных решений по различным вопросам я получаю эти ошибки компоновщика:

            Error   3   error LNK2001: unresolved external symbol "enum tag_nsresult __cdecl NS_TableDrivenQI(void *,struct nsID const &,void * *,struct QITableEntry const *)" (?NS_TableDrivenQI@@YA?AW4tag_nsresult@@PAXABUnsID@@PAPAXPBUQITableEntry@@@Z)   C:\Users\user\Desktop\sample\sample\sample\nsSample.obj sample
            Error   4   error LNK2001: unresolved external symbol "public: unsigned short const * __thiscall nsAString::BeginReading(void)const " (?BeginReading@nsAString@@QBEPBGXZ)   C:\Users\user\Desktop\sample\sample\sample\nsSample.obj sample
            Error   5   error LNK2001: unresolved external symbol "public: virtual enum tag_nsresult __thiscall mozilla::GenericModule::CanUnload(class nsIComponentManager *,bool *)" (?CanUnload@GenericModule@mozilla@@UAE?AW4tag_nsresult@@PAVnsIComponentManager@@PA_N@Z)  C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample
            Error   6   error LNK2001: unresolved external symbol "public: virtual enum tag_nsresult __thiscall mozilla::GenericModule::UnregisterSelf(class nsIComponentManager *,class nsIFile *,char const *)" (?UnregisterSelf@GenericModule@mozilla@@UAE?AW4tag_nsresult@@PAVnsIComponentManager@@PAVnsIFile@@PBD@Z)   C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample
            Error   7   error LNK2001: unresolved external symbol "public: virtual enum tag_nsresult __thiscall mozilla::GenericModule::RegisterSelf(class nsIComponentManager *,class nsIFile *,char const *,char const *)" (?RegisterSelf@GenericModule@mozilla@@UAE?AW4tag_nsresult@@PAVnsIComponentManager@@PAVnsIFile@@PBD2@Z) C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample
            Error   8   error LNK2001: unresolved external symbol "public: virtual enum tag_nsresult __thiscall mozilla::GenericModule::GetClassObject(class nsIComponentManager *,struct nsID const &,struct nsID const &,void * *)" (?GetClassObject@GenericModule@mozilla@@UAE?AW4tag_nsresult@@PAVnsIComponentManager@@ABUnsID@@1PAPAX@Z)   C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample
            Error   9   error LNK2001: unresolved external symbol "public: virtual unsigned int __thiscall mozilla::GenericModule::Release(void)" (?Release@GenericModule@mozilla@@UAEIXZ)  C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample
            Error   10  error LNK2001: unresolved external symbol "public: virtual unsigned int __thiscall mozilla::GenericModule::AddRef(void)" (?AddRef@GenericModule@mozilla@@UAEIXZ)    C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample
            Error   11  error LNK2001: unresolved external symbol "public: virtual enum tag_nsresult __thiscall mozilla::GenericModule::QueryInterface(struct nsID const &,void * *)" (?QueryInterface@GenericModule@mozilla@@UAE?AW4tag_nsresult@@ABUnsID@@PAPAX@Z)    C:\Users\user\Desktop\sample\sample\sample\nsSampleModule.obj   sample

Я добавил ВСЕ файлы LIB из SDK и все еще ничего. Я нашел похожие проблемы у других разработчиков, но никаких решений:

http://forums.mozillazine.org/viewtopic.php?f=19&t=2288909

https://bugzilla.mozilla.org/show_bug.cgi?id=682259

Последняя ссылка должна предоставить решение, но оно не работает для меня (и для другого пользователя на этой странице).

У кого-нибудь есть подсказки/решения/предложения по этой проблеме?

ОБНОВИТЬ:

После определения XP_WIN я получаю только одну ошибку компоновщика:

LNK2001: unresolved external symbol "public: unsigned short const * __thiscall nsAString::BeginReading(void)const " (?BeginReading@nsAString@@QBEPBGXZ) C:\Users\user\Desktop\sample\sample\sample\nsSample.obj sample

Кажется, это привело меня к тому же месту, что и этот парень:

https://bugzilla.mozilla.org/show_bug.cgi?id=682259#c7

UPDATE2:

Это связано с предыдущей проблемой, с которой я столкнулся с конфликтующими typedef для char16_t внутри mozilla Char16.h и MS yvals.h:

typedef wchar_t char16_t;
vs
typedef unsigned short char16_t;

Моим новым решением было определить _CHAR16T чтобы предотвратить _CHAR16T заголовков MS typedef-ing char16_t.

  • 0
    Вы скомпилировали xulrunner sdk?
  • 0
    @JoãoAugusto JoãoAugusto Нет, я предварительно скомпилировал его из Mozilla. Я не знаю, может ли компиляция самостоятельно решить некоторые проблемы ... Может ли это?
Показать ещё 5 комментариев
Теги:
linker
xpcom

1 ответ

0
Лучший ответ

ОК. Были проблемы:

  1. Мне нужно было определить XP_WIN.
  2. Я должен был определить _CHAR16T чтобы запретить заголовки MS typedef-ing char16_t.

Это те библиотеки, на которые у меня есть зависимости в данный момент:

crmf.lib
nss3.lib
unicharutil_external_s.lib
mozjs.lib
xpcomglue.lib
xpcomglue_staticruntime.lib
xpcomglue_staticruntime_s.lib
xpcomglue_s.lib
mozglue.lib
mozalloc.lib
  • 0
    К вашему сведению: двоичные XPCOM и NPAPI по-прежнему работают в Firefox, но они оба находятся на выходе. Рекомендуемый способ доступа к двоичному коду - использовать JS ctypes: developer.mozilla.org/en-US/docs/Mozilla/js-ctypes .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню