2012-01-15 16 views
3

私はここに利用できるXPCOMコンポーネントを構築しようとしている: http://mxr.mozilla.org/mozilla-central/source/xpcom/sample/ビルドXPCOM Mozillaの試料成分

このコンポーネントは全体Mozillaの供給源から単離することができるように、私は、私自身のMakefileでコンパイルしようとしました。

ここ
[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 

私が作ったメイクファイルです:だからここ

は私のファイルツリーである

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) 

私はWindowsでcygwinのでそれを構築しようとしているが(gccで& G ++インストール) 。

コンパイルすると、私はTHOSのエラーを取得しています、と研究のいくつかの時間後、私はまだそれを理解していない:Mozillaのコードに誤りがあったかのように

$ 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 

それはあります...何が間違っているのですか?

ありがとうございます!

答えて

1

ウラジミールは一点に正しかったです。コンパイルには欠けていた。

しかし、このファイルを作成しても、主な問題は解決しません。Mozilla XPCOMはGCC for Windowsでコンパイルできません。

VisualC++ expressの下で同じコードがコンパイルされます。

これは奇妙なことですが、私はなぜこのコンパイラを選んだのだろうかと思います。私のようにやってはいけない、Mozilla XPCOMをコンパイルするためにGCCを試してはいけない!

+0

これを構築するためにGecko SDKのどのバージョンを使用しましたか?私はMSVS 2013で 'xulrunner-34.0.5.en-US.win32.sdk'を試しています(メークファイルなし)、何があってもビルドされません。 – user2173353

2

重要なエラーが残りは、フォローアップのエラーのように見える、この1のようだ:

nsSample.h:23:44 nsISample.h:そのようなファイルやディレクトリはありません

ファイルが xpidl command line toolを使用して nsISample.idlからのビルド時に作成する必要があること

XPIDL -mヘッダnsISample.idl

はどうやら、あなたの代わりにpyxpidlを使用することになり、新しいXULRunnerのSDKのバージョンに:nsISample:

header.py -o nsISample.h nsISample.idl

+0

-Iスイッチを使用してsdkからidl-dirを設定することを忘れないでください。たとえば、次のようにします: 'header.py -Ic:\ workspace \ xulrunner-sdk \ idl -o" nsISample.h "nsISample.idl' – weberph

関連する問題