2012-01-15 3 views
3

Я пытаюсь построить компонент XPCOM доступного здесь: http://mxr.mozilla.org/mozilla-central/source/xpcom/sample/Сложения XPCOM Mozilla Измеряемого компонент

я пытался скомпилировать его с моей собственной Makefile, так что этот компонент может быть выделен из целых источников Mozilla.

Так вот мой файл дерева:

[email protected] /cygdrive/c/dev/central_sample 
$ ls -Rlah 
.: 
total 57K 
d---------+ 1 frinux None 0 Jan 15 21:28 . 
d---------+ 1 frinux None 0 Jan 15 20:34 .. 
----------+ 1 frinux None 989 Jan 15 21:22 Makefile 
----------+ 1 frinux None 2.4K Jan 15 21:05 nsISample.idl 
----------+ 1 frinux None 6.0K Jan 15 21:05 nsSample.cpp 
----------+ 1 frinux None 5.1K Jan 15 21:06 nsSample.h 
----------+ 1 frinux None 2.0K Jan 15 21:06 nsSample.js 
----------+ 1 frinux None 131 Jan 15 21:06 nsSample.manifest 
----------+ 1 frinux None 4.7K Jan 15 21:06 nsSampleModule.cpp 
d---------+ 1 frinux None 0 Jan 15 21:28 program 
----------+ 1 frinux None 8.7K Jan 15 21:06 xpconnect-sample.html 

./program: 
total 16K 
d---------+ 1 frinux None 0 Jan 15 21:28 . 
d---------+ 1 frinux None 0 Jan 15 21:28 .. 
----------+ 1 frinux None 2.7K Jan 15 21:07 Makefile.in 
----------+ 1 frinux None 4.5K Jan 15 21:07 nsTestSample.cpp 

Вот Makefile я сделал:

CXX = c++ 
CPPFLAGS +=  -fno-rtti    \ 
     -fno-exceptions  \ 
     -shared 

# Change this to point at your Gecko SDK directory. 
GECKO_SDK_PATH = /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1 

# GCC only define which allows us to not have to #include mozilla-config 
# in every .cpp file. If your not using GCC remove this line and add 
# #include "mozilla-config.h" to each of your .cpp files. 
GECKO_CONFIG_INCLUDE = -include mozilla-config.h 

GECKO_DEFINES = -DXPCOM_GLUE -DXP_WIN 

GECKO_INCLUDES = -I $(GECKO_SDK_PATH)/include 

GECKO_LDFLAGS = -L $(GECKO_SDK_PATH)/lib -lxpcomglue \ 
       -lnspr4  \ 
       -lplds4  

FILES = nsSample.cpp nsSampleModule.cpp 

TARGET = sample.dll 

build: 
    $(CXX) -Wall -Os -o $(TARGET) $(GECKO_CONFIG_INCLUDE) $(GECKO_DEFINES) $(GECKO_INCLUDES) $(GECKO_LDFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(FILES) 
    chmod +x $(TARGET) 
    strip $(TARGET) 

clean: 
    rm $(TARGET) 

Я пытаюсь построить его с Cygwin под ОС Windows (с НКУ & г ++ установлен) ,

При компиляции, я получаю Thos ошибки, и после нескольких часов исследований, я до сих пор не понимаю их:

$ make 
c++ -Wall -Os -o greenfox.dll -include mozilla-config.h -DXPCOM_GLUE -DXP_WIN -I /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include -L /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/lib -lxpcomglue -lnspr4  -lplds4  -fno-rtti    -fno-exceptions   -shared nsSample.cpp nsSampleModule.cpp 
In file included from nsSample.cpp:48: 
nsSample.h:44:23: nsISample.h: No such file or directory 
In file included from nsSample.cpp:48: 
nsSample.h:64: error: expected class-name before '{' token 
nsSample.h:76: error: `NS_DECL_ISUPPORTS' does not name a type 
In file included from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsAlgorithm.h:43, 
       from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsTArray.h:45, 
       from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsStringAPI.h:56, 
       from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsEmbedString.h:43, 
       from nsSample.cpp:51: 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:143: error: an explicit specialization must be preceded by 'template <>' 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:433: error: an explicit specialization must be preceded by 'template <>' 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:727: error: an explicit specialization must be preceded by 'template <>' 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:763: error: an explicit specialization must be preceded by 'template <>' 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:828: error: an explicit specialization must be preceded by 'template <>' 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCharTraits.h:840: error: an explicit specialization must be preceded by 'template <>' 
nsSample.cpp:61: error: no `nsSampleImpl::~nsSampleImpl()' member function declared in class `nsSampleImpl' 
nsSample.cpp:81: error: no `nsrefcnt nsSampleImpl::AddRef()' member function declared in class `nsSampleImpl' 
nsSample.cpp: In member function `nsrefcnt nsSampleImpl::AddRef()': 
nsSample.cpp:81: error: `mRefCnt' undeclared (first use this function) 
nsSample.cpp:81: error: (Each undeclared identifier is reported only once for each function it appears in.) 
nsSample.cpp: At global scope: 
nsSample.cpp:81: error: no `nsrefcnt nsSampleImpl::Release()' member function declared in class `nsSampleImpl' 
nsSample.cpp: In member function `nsrefcnt nsSampleImpl::Release()': 
nsSample.cpp:81: error: `mRefCnt' undeclared (first use this function) 
nsSample.cpp: At global scope: 
nsSample.cpp:81: error: no `nsresult nsSampleImpl::QueryInterface(const nsIID&, void**)' member function declared in class `nsSampleImpl' 
nsSample.cpp: In member function `nsresult nsSampleImpl::QueryInterface(const nsIID&, void**)': 
nsSample.cpp:81: error: `::nsISample' has not been declared 
nsSample.cpp:81: error: `COMTypeInfo' undeclared (first use this function) 
nsSample.cpp:81: error: expected primary-expression before "int" 
nsSample.cpp:81: error: expected `)' before "int" 
nsSample.cpp:81: error: expected `)' before ';' token 
nsSample.cpp:81: error: `nsISample' has not been declared 
nsSample.cpp:81: error: expected `>' before '*' token 
nsSample.cpp:81: error: expected `(' before '*' token 
nsSample.cpp:81: error: expected primary-expression before '>' token 
nsSample.cpp:81: error: expected `)' before ';' token 
nsSample.cpp: In function `nsresult nsSampleImpl_GetInterfacesHelper(PRUint32*, nsIID***)': 
nsSample.cpp:81: error: `::nsISample' has not been declared 
nsSample.cpp:81: error: `COMTypeInfo' undeclared (first use this function) 
nsSample.cpp:81: error: expected primary-expression before '*' token 
nsSample.cpp:81: error: expected primary-expression before ')' token 
nsSample.cpp:81: error: expected `;' 
nsSample.cpp: At global scope: 
nsSample.cpp:89: error: no `nsresult nsSampleImpl::GetValue(char**)' member function declared in class `nsSampleImpl' 
nsSample.cpp:120: error: no `nsresult nsSampleImpl::SetValue(const char*)' member function declared in class `nsSampleImpl' 
nsSample.cpp:141: error: no `nsresult nsSampleImpl::Poke(const char*)' member function declared in class `nsSampleImpl' 
nsSample.cpp: In member function `nsresult nsSampleImpl::Poke(const char*)': 
nsSample.cpp:142: error: `SetValue' undeclared (first use this function) 
nsSample.cpp: At global scope: 
nsSample.cpp:153: error: no `nsresult nsSampleImpl::WriteValue(const char*)' member function declared in class `nsSampleImpl' 
In file included from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/mozilla/Module.h:44, 
       from /cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/mozilla/ModuleUtils.h:42, 
       from nsSampleModule.cpp:39: 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCOMPtr.h:895: error: an explicit specialization must be preceded by 'template <>' 
/cygdrive/c/dev/greenchallenge/xulrunner-sdk-9.0.1/include/nsCOMPtr.h:1366: error: an explicit specialization must be preceded by 'template <>' 
In file included from nsSampleModule.cpp:42: 
nsSample.h:44:23: nsISample.h: No such file or directory 
In file included from nsSampleModule.cpp:42: 
nsSample.h:64: error: expected class-name before '{' token 
nsSample.h:125: error: ISO C++ forbids declaration of `NS_DECL_NSISAMPLE' with no type 
nsSample.h:125: error: expected `;' before "private" 
Makefile:27: recipe for target `build' failed 
make: *** [build] Error 1 

Это как если бы там была ошибка в коде Mozilla ... Что я делаю не так ?

Спасибо!

ответ

1

Владимир был прав в одном: nsISample. h отсутствовал в компиляции.

Однако при создании файла не разрешается основная проблема: Mozilla XPCOM не может быть скомпилирован с помощью GCC для Windows!

Будет скомпилирован тот же код в VisualC++ express.

Странно, интересно, почему они выбрали этот компилятор. Не делайте, как я, не пытайтесь GCC компилировать Mozilla XPCOM!

+0

Какую версию SDK Gecko вы использовали для этого? Я пытаюсь с 'xulrunner-34.0.5.en-US.win32.sdk' в MSVS 2013 (без make-файла), и он не будет строить, несмотря ни на что. – user2173353

2

важная ошибка, кажется, это один, остальное выглядит последующих ошибок:

nsSample.h: 44: 23: nsISample.h: Нет такого файла или каталога

Этот файл должен быть создан во время сборки из nsISample.idl используя xpidl command line tool:

XPIDL -m заголовок nsISample.idl

Очевидно, что в новых версиях SDK XulRunner вы бы использовать вместо pyxpidl:

header.py -o nsISample.h nsISample.idl

+0

убедитесь, что вы используете переключатель -I для установки idl-dir из sdk, например: 'header.py -Ic: \ workspace \ xulrunner-sdk \ idl -o" nsISample.h "nsISample.idl' – weberph