2012-05-09 13 views
1

firefox 12 sdkが 'Proxy'オブジェクトを削除したので、cross-thread callsをnsRunnableを使用して使いたかったのです。私は基本的にコードのコピー&ペーストをしました:nsRunnableとリンクする際にtypeinfoへの未定義の参照

class NotifyTask : public nsRunnable 
{ 
public: 
    NotifyTask(nsISupports *subject, const char *topic, bool remref) 
    : mWorkerThread(do_GetCurrentThread()) 
    { 
    MOZ_ASSERT(!NS_IsMainThread()); // This should be running on the worker thread 
    } 

    NS_IMETHOD Run() { 
    MOZ_ASSERT(NS_IsMainThread()); // This method is supposed to run on the main thread! 

    mWorkerThread->Shutdown(); 
    return NS_OK; 
    } 

private: 
    nsCOMPtr<nsIThread> mWorkerThread; 
}; 

私はそれをコンパイルしようとしました。それはSDKが-fvisibility =隠された、いくつかの奇妙な「異なるの.soで鍵方式」で造られたものヤモリかもしれないg++ undefined reference to typeinfoによると

g++ -std=gnu++0x -Wall -O2 -c -DUSE_LIBUSB -fPIC -DHAVE_CRYPTO -fpermissive -DCRYPTPP -fshort-wchar -I../../xulrunner-sdk/include -o gipsy.o gipsy.cpp 
gipsy.cpp:74:7: warning: ‘NotifyTask’ declared with greater visibility than the type of its field ‘NotifyTask::<anonymous>’ [-Wattributes] 
gipsy.cpp:74:7: warning: ‘NotifyTask’ declared with greater visibility than its base ‘nsRunnable’ [-Wattributes] 
g++ -std=gnu++0x -Wl,-z,defs -Wall -Os -o gipsy.so -shared gipsy.o gipsymodule.o tracklog.o gpslib/data.o gpslib/garmin.o gpslib/gps.o gpslib/phys.o gpslib/igc.o gpslib/aircotec.o cp1250.o prefparser.o gpslib/foreignigc.o gpslib/mlr.o gpslib/flymaster.o gpslib/compeo.o gpslib/iq.o ../libs/libcryptopp.a -lusb -L../../xulrunner-sdk/lib -lxpcomglue_s -lxul -lxpcom -lplds4 -lplc4 -lnspr4 -lpthread -ldl -lmozalloc 
gipsy.o:(.data.rel.ro._ZTI10NotifyTask[typeinfo for NotifyTask]+0x10): undefined reference to `typeinfo for nsRunnable' 
collect2: ld returned 1 exit status 

:私はエラーを次しまいました。 Gecko sdkでこれがエラーですか?何か間違っていますか?

答えて

1

gecko SDKはRTTIとリンクしていません - 特定の.oファイルに "-fno-rtti"パラメータを追加すると問題が解決しました。

関連する問題