茂木です。
今更になってしまいましたが、情報共有ありがとうございます。Windowsでのビ
ルドはものすごく時間がかかるので、このような情報は非常にありがたいです。
山田さんのほうではすでに既知かもしれませんが、周知のため: バージョン4.1
以降ではmsvcのデバッグビルドに切り替える機能が追加されたようです。
gbuild: add support for building against MSVC debug runtime
http://cgit.freedesktop.org/libreoffice/core/commit/?h=libreoffice-4-1&id=3b65852f37f1c8daf8c5c0af1d810c68cc71d8e3
しかしながら、個人的には4.1はカスタマイズして製品とするには早いかなとい
う感じがするため、山田さんの報告していた情報はまだまだ活躍すると思います。
(2013/08/20 8:36), 山田太郎 wrote:
お世話になっております。
■Windows環境のLibreOffice4.0.3.3で_DEBUGを有効にする手順について
・なんとか_DEBUGを有効にすることに成功しましたので、手順を展開させて頂
きます。
ここまで辿り着くのにかなりの時間を費やしてしまいました。
※一部調査が必要な項目がまだ残っています。
◆ステップ1:solenv\gbuild\gbuild.mk <http://gbuild.mk>の修正
「ifneq ($(COM),MSC)
gb_GLOBALDEFS += -D_DEBUG \」を
「ifeq ($(COM),MSC)
gb_GLOBALDEFS += -D_DEBUG \」に修正。
・_HAS_ITERATOR_DEBUGGING=0を追加。
# free.toolcreator add start
gb_GLOBALDEFS += -D_HAS_ITERATOR_DEBUGGING=0
# free.toolcreator add end
※「_HAS_ITERATOR_DEBUGGING=0」はboostをVisualStudioのデバッグ
ビルドでビルドすると発生するエラーを回避するためのものです。
詳細は以下のURLを参照願います。
参考URL:http://social.msdn.microsoft.com/Forums/vstudio/en-US
/03087447-620f-402b-9182-0da5ae6bf61f/boostmultiarray-vs2010debug
◆ステップ2:autoge.shの実行
・--enable-dbgutilを付加して実行します。参考までに、私の環境の
autogen.lastrun
は以下のとおりです。
--disable-activex
--disable-atl
--with-nss-build-tools=/cygdrive/c/mozilla-build
--with-ant-home=/cygdrive/d/apache-ant-1.9.0
--without-junit
--with-cl-home=C:\PROGRA~2\MICROS~2.0\VC
--without-help
--without-myspell-dicts
--enable-debug
--enable-dbgutil
--with-lang=en-US ja
◆ステップ3:Externalモジュールのメイクファイルの修正
・ExternalProject_Externalモジュール名.mk
<http://xn--yck6dky8fx60y.mk>の「/p:Configuration=Release」を
「/p:Configuration=Debug」に修正。
・ExternalPackage_Externalモジュール名.mk
<http://xn--yck6dky8fx60y.mk>の「#$(eval $(call
gb_ExternalPackage_add_file」
のパラメータに渡されているパスのReleaseをDebugに修正。
※少なくともlibcdr,libwpd,libmspub,libvisioに同様の修正が必要です。
◆ステップ4:python3モジュールのメイクファイルの修正
・ExternalProject_python3.mkの「/p:Configuration=Release」を
「/p:Configuration=Debug」に修正。
・python3\ExternalPackage_python3.mkのlib,dll,pyd名に_dを付加
します。
※_d.lib,_d.dll,_d.pydに変更します。
◆ステップ5:ビルドの実行
・ビルドエラーが発生した時点で、適宜以下のステップの修正を行い
ます。
◆ステップ6:Externalモジュールのソリューションファイルの修正
・libcdr,libmspub,libvisio,libwpd,liborcusのソリューションファ
イルを
Visual Studio 2012 Express for Desktopで開いてプロジェクト変
換します。
・上記ソリューションファイルの「追加のインクルードディレクト
リ」に以下を
追加します。
solver\inc\external
solver\inc\zlib
・上記ソリューションファイルの「プリプロセッサ」に以下を追加します。
_HAS_ITERATOR_DEBUGGING=0
BOOST_ALL_NO_LIB(liborcusのみ。オートリンク無効化マクロ。)
※BOOST_ALL_NO_LIBとはboostのオートリンク機能で、ライブラリ名が
変更されることを防ぐためのものだそうです。
・Visual Studio 2012 Express for Desktopでリビルドします。
※liborcusはliborcus-static-nozipのみリビルドします。
debug\orcus.libが
生成されるのでILIB環境変数が指すディレクトリにコピーします。
(ILIB環境変数の定義はconfig.statusに記載されています)
◆ステップ7:python3モジュールのソリューションファイルの修正
・workdir\wntmsci14\UnpackedTarball\python3\PCbuild\pcbuild.slnを
Visual Studio 2012 Express for Desktopで開きます。
・構成プロパティのxxlimitedとpython3dllのReleaseをDebugに変更
します。
・ターゲット名に_dを付加します。
◆ステップ8:testtools\source\bridgetest\cppobj.cxxのdothrow()
の修正(要原因調査)
・throw ::std::bad_alloc();の後のcatchブロックのtry-catchを
コメントアウトします。
※bad_alloc例外をキャッチ出来るかのテストコードの様ですが、
ビルド中に何故か
キャッチ後のエラー「getCaughtException() failed!」が発生
するため、コメントアウト
しています。原因はまだ調査していません。
◆ステップ9:unittestの無効化(要原因調査)
・ビルドエラーを起こすunittestを無効化します。
具体的にはModule_モジュール名.mkの
「$(eval $(call gb_Module_add_check_targets,モジュール名,\」
の行をコメントアウト
します。
※これも原因がまだわかっていませんが、ビルド中にユニットテス
トに失敗するため
コメントアウトしています。
■Windows環境のLibreOffice4.0.3.3でmsvcrtdを使用したメモリリークチェック
の方法に
ついて
・現在環境構築中です。環境が出来たら、また展開させて頂きます。
以上です。
2013年8月5日 16:09 山田太郎 <free.toolcreator@gmail.com
<mailto:free.toolcreator@gmail.com>>:
>
> お世話になっております。
>
> ■環境変数CPPFLAGSについて
>
> ・autogen.shに環境変数を渡してビルドした結果ですが、config.statusは
> S["CPPFLAGS"]="-D_DEBUG"
> となっているのですが結果的にReleaseモードになっている様です。
>
> ◆確認用コード(vcl\source\app\svmain.cxx)
> (中略)
> #if OSL_DEBUG_LEVEL > 0
> #include <typeinfo>
> #include "rtl/strbuf.hxx"
> #endif
>
> // free.toolcreator add start
> #ifdef _DEBUG
> #pragma message("######################################DEBUG
MODE######################################")
> #else
> #pragma message("######################################RELEASE
MODE######################################")
> #endif
> // free.toolcreator add end
>
> using ::rtl::OUString;
> using namespace ::com::sun::star;
> (以下略)
>
> ◆確認結果(ビルド実行結果)
> (略)
> [build MOD] connectivity
> [build CHK] sot
> ######################################RELEASE
MODE######################################
> [build LNK] Library/ivcl.lib
> ライブラリ
C:/cygwin/home/test/Debug/libreoffice-4.0.3.3/workdir/wntmsci14.pro/LinkTarget/Library/ivcl.lib
<http://wntmsci14.pro/LinkTarget/Library/ivcl.lib> とオブジェクト
C:/cygwin/home/test/Debug/libreoffice-4.0.3.3/workdir/wntmsci14.pro/LinkTarget/Library/ivcl.exp
<http://wntmsci14.pro/LinkTarget/Library/ivcl.exp> を作成中
> (以下略)
>
> ※dmake\Makefileに、
> CPPFLAGS =
> と定義されているため、もしかしたらundefされているかもしれませ
ん(未確認です)。
>
> ※メイクファイルを追おうとしたのですが、_DEBUGを定義している所を
別に見つけたので、
> そちらを先に確認しようと思います。
>
> ■gb_COMPILERDEFSへの追加について
>
> ・gbuild.mk <http://gbuild.mk>に以下の様なコードを見つけました。
>
> (略)
> gb_GLOBALDEFS := \
> -D_REENTRANT \
> -DOSL_DEBUG_LEVEL=$(gb_DEBUGLEVEL) \
> -DSUPD=$(UPD) \
> $(gb_OSDEFS) \
> $(gb_COMPILERDEFS) \
> $(gb_CPUDEFS) \
>
> # This is used to detect whether LibreOffice is being built (as
opposed to building
> # 3rd-party code). Used for tag deprecation for API we want to
> # ensure is not used at all externally while we clean
> # out our internal usage, for code in sal/ that should be used
only internally, etc.
> gb_GLOBALDEFS += \
> -DLIBO_INTERNAL_ONLY \
>
> ifeq ($(gb_ENABLE_DBGUTIL),$(true))
> gb_GLOBALDEFS += -DDBG_UTIL \
>
> ifneq ($(COM),MSC)
> gb_GLOBALDEFS += -D_DEBUG \
>
> endif
> endif
> (以下略)
>
> ※多分ifneq ($(COM),MSC)ではなくifeq ($(COM),MSC)が正しいと思われ
るため、
> ここを修正してビルドしてみます。
>
> 以上です。
>
>
> 2013年8月4日 15:05 山田太郎 <free.toolcreator@gmail.com
<mailto:free.toolcreator@gmail.com>>:
>
> >
> > 茂木さん、いつも詳細なご回答ありがとうございます。
> >
> > ■--enable-dbgutilについて
> >
> > ・ChangeLogに「--enable-dbgutil doesn't cause -D_DEBUG any more」
と記載されていました。
> > 英語はよくわからないので解釈間違ってるかもしれませんが、恐らく
--enable-dbgutilを使用
> > しても -D_DEBUGは有効にならない様ですね。
> >
> > ■環境変数CPPFLAGSについて
> >
> > ・autogen.shのオプションに環境変数が渡せた事を忘れていました。以
下の設定で、現在ビルドを
> > 行なっています。結果は後ほどご報告させて頂きます。
> >
> >
> > ◆autogen.shに渡したパラメータ(autogen.lastrun)
> > --disable-activex
> > --disable-atl
> > --with-nss-build-tools=/cygdrive/c/mozilla-build
> > --with-ant-home=D:\apache-ant-1.9.0
> > --without-junit
> > --with-cl-home=C:\PROGRA~2\MICROS~2.0\VC
> > --without-help
> > --without-myspell-dicts
> > --enable-debug
> > --with-lang=en-US ja
> > CPPFLAGS=-D_DEBUG
> >
> > ■外部の依存ライブラリへの影響について
> >
> > ・「外部の依存ライブラリ」がExternalモジュールを指しているとして
ご回答させて頂きます。
> > 各Externalモジュールのメイクファイル(ExternalProject_モジュール
名.mk)は以下の様に
> > なっています。
> > ifeq ($(VCVER),110)
> > (中略)
> > && MAKEFLAGS= MSBuild.exe ソリューションファイル名または
vcxprojファイル名
> > /t:Build /p:Configuration=Release /p:PlatformToolset=v110 \
> > (以下略)
> > つまり常にReleaseモードでビルドされます。
> > 全てDebugモードでビルドしたい所ですが、とりあえずExternalモ
ジュールはRelease
> > モードのままでビルドしています。
> > ※ /p:Configuration=Debugにすると、さらにMakefileの修正
> > (例えばpython3モジュールの場合、ExternalPackage_python3.mkの
ライブラリ名やlib名
> > に_dを付加する必要あり)
> > が必要となりますし、過去に試してみたのですが、Externalモ
ジュールがビルドに失敗して
> > しまいます(例えばpython3モジュールの場合LO_lib/python3_d.dll
やLO_lib/python3_d.libが
> > 無いため失敗します)。
> >
> > 影響が有るか無いかについては、後ほどご報告させて頂きます。
> >
> > ■gb_COMPILERDEFSへの追加について
> >
> > ・こちらも後でトライしてみます。
> >
> > ■メモリリークチェック方法について
> >
> > ・教えて頂いたURLに記載の内容を1つずつ試してみます。
> > ※結果報告に時間が掛かるかもしれませんがご容赦願います。
> >
> > ■wineの使用について
> >
> > ・こちらも後でトライしてみます。現在LibreOfficeのカスタマイズ案件
の対応中なのですが
> > wineでの検証結果でクライアント様が納得するか不安なので、最終手
段として検証
> > してみます。
> >
> > 以上です。
> >
> >
> >
> >
> > 2013年8月3日 22:39 Isamu Mogi <wiz.saturday@gmail.com
<mailto:wiz.saturday@gmail.com>>:
> >
> > >
> > > 茂木です。
> > >
> > > > ■不明点1
> > >
> > > 環境変数CPPFLAGSに当該マクロを書いて、configureし直しでできます。
ただ、
> > > 確認はしていませんが外部の依存ライブラリまで影響がいきそうな気が
します。
> > > それが嫌な場合はsolenv/gbuild/platform/com_MSC_defs.mkの40行目付近
> > > gb_COMPILERDEFSに手動で追加するのが良いと思います。自動で付加する
機能が
> > > みつかればそっちが良いのですが、僕は見つけられなかったです。
> > >
> > > > ■不明点2
> > >
> > > ここで聞くよりstackoverflowを見るほうがよさそうです。
> > >
http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows
> > >
> > > valgrindが得意なら、下記コマンドを使うのが良いと思います。
> > >
> > > valgrind --trace-children=yes wine soffice.exe
> > >
> > >
> > > (2013/08/02 17:14), 山田太郎 wrote:
> > > > お世話になっております。
> > > >
> > > > 不明点が2点あり、ご存知の方はご回答をお願い致します。
> > > >
> > > > ■不明点1
> > > > ・メモリリークを検出するために、下記の「ビルド環境」に記載の環
境で日本語版LibreOffice4.0.3.3を
> > > > ビルドしたのですが、_DEBUGが有効になっていない様です。
> > > > どなたか解決方法をご存知の方いらっしゃいますでしょうか?
> > > > ※この不明点の質問意図はmsvcrtd.dllを使用したメモリリークチェッ
クを実施する際に_DEBUGが
> > > > 有効である必要があるために質問させて頂いております。
> > > >
> > > > ■不明点2
> > > > ・Windows環境で、LibreOfficeのメモリリークを検出する方法(どの行
でnewまたはmalloc()した
> > > > メモリが解放されていないかを知る方法)をご存知の方いらっしゃいま
したら
> > > > ご回答をお願い致します。
> > > > ※Linux環境であればvalgrindで検出出来るのですが、valgrindは
cygwinに対応して
> > > > おりません。
> > > > ※WinDbgやApplication Verifier、パフォーマンスモニター、
Performance Analyzer、
> > > > Xperf等も試してみたのですが、使い方に問題があるせいなのか不明ですが
> > > > リークを検出できませんでした。
> > > >
> > > > ■ソースファイル
> > > > http://ja.libreoffice.org/download/?type=src&version=4.0.3から
ダウンロードした
> > > > バージョン4.0.3.3ソースファイル
> > > >
> > > > ■ビルド環境
> > > > OS:Windows7(64bit)
> > > > Cygwin:1.7.18(0.263/5/3)
> > > > コンパイラ:Visual Studio 2012 Express for Desktop
> > > > make:LOパッチが当てられたGNU make 3.82
> > > > http://dev-www.libreoffice.org/bin/cygwin/make
> > > >
> > > > ■autogen.shに渡したパラメータ(autogen.lastrun)
> > > > --disable-activex
> > > > --disable-atl
> > > > --with-nss-build-tools=/cygdrive/c/mozilla-build
> > > > --with-ant-home=D:\apache-ant-1.9.0
> > > > --without-junit
> > > > --with-cl-home=C:\PROGRA~2\MICROS~2.0\VC
> > > > --without-help
> > > > --without-myspell-dicts
> > > > --enable-debug
> > > > --enable-dbgutil ←これが有効な場合、_DEBUGが有効になると考えて
いたのですが、だめでした。
> > > > --with-lang=en-US ja
> > > >
> > > >
> > > > 以上、宜しくお願い致します。
> > > >
> > >
--
Unsubscribe instructions: E-mail to discuss+unsubscribe@ja.libreoffice.org
Posting guidelines + more: http://wiki.documentfoundation.org/Netiquette
List archive: http://listarchives.libreoffice.org/ja/discuss/
All messages sent to this list will be publicly archived and cannot be deleted
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.