-1

VC2008Expressを使用してコンパイルされたプライベートプロジェクトでlibGTSを使用しています。

短縮版

libGTSはglib2に依存していますが、これは(AFAIK)VC2008ではコンパイルできません。glib2の関連部分をlibGTSにプルして、フォークを作成したいと思います。その問題に取り組む良い方法は何ですか?

ロングバージョン

libGTS(元々はautotoolsを使用)を使用するために、私はすでにそれをcmakeビルドシステムに変換しました。

残念ながら、libGTSはglib2に依存しています。これは、libiconv、libintl、pcre、libFFI(新しいバージョン)、pkg-configに依存しています。ここで、pkg-configはglib2に依存しています。つまり、循環依存関係です。

私の知る限り、glib2はautotoolsが必要であり、Glib2(およびすべての依存関係)をcmakeのようなものに変換するには時間がかかりすぎるため、VC2008Expressを使用してコンパイルすることはできません。

これまで、mingwを使用してビルドglib2を管理し、mingw-builtglib2をmsvc-builtlibGTSとリンクしました(glib2にはCインターフェイスがあるため、可能です)が、glib2とlibGTSが異なるcrtを使用するため、問題が発生する場合があります。 、およびlibGTSはFILE*などをglib2に渡します。

幸い、libGTSはglib2のごく一部を使用します。

g_slist_remove_link
g_list_foreach
g_array_append_vals
g_array_new
g_array_free
g_strdup_vprintf
g_string_free
g_string_new
g_slist_foreach
g_string_insert_c
g_strdup_printf
g_strdup
g_strjoin
g_str_equal
g_str_hash
g_malloc0
g_ptr_array_set_size
g_list_reverse
g_list_length
g_ptr_array_free
g_mem_chunk_destroy
g_ptr_array_remove_index
g_mem_chunk_free
g_mem_chunk_alloc
g_ptr_array_add
g_ptr_array_new
g_mem_chunk_new
g_list_remove_link
g_list_free_1
g_hash_table_lookup
g_malloc
g_free
g_slist_length
g_hash_table_new
g_hash_table_foreach
g_hash_table_remove
g_hash_table_insert
g_hash_table_destroy
g_slist_find
g_slist_remove
g_slist_reverse
g_hash_table_size
g_hash_table_find
g_assertion_message
g_list_last
g_slist_append
g_list_free
g_list_prepend
g_list_append
g_assertion_message_expr
g_slist_free_1
g_node_destroy
g_node_depth
g_slist_concat
g_node_new
g_slist_prepend
g_slist_nth
g_node_prepend
g_slist_free
g_hash_table_foreach_remove
g_log

そこで、glibの関連部分をlibGTSに取り込み、すべての外部依存関係を取り除き(iconv / libintl-このサブシステムはそれらを必要としません)、「クリーンな」フォークを作成します(両方のライブラリはLGPLであり、サービスgithub/がありますbitbucketなので、問題ありません)。「クリーンな」フォークは、最小限の外部依存関係を意味します。

glib2(個々のファイル)の別々の部分をlibgtsのcmakeサブディレクトリ(つまり、「glib2lite」ライブラリプロジェクトを含むディレクトリ)にプルしようとしましたが、通常は1つのファイルが他のすべてをプルするため、これは実際にはうまくいきません。また、(実際に使用されている関数を見つけるために)libgtsのコールグラフを生成することもできましたが、最終的にはあまり役に立ちませんでした。

では、この問題に取り組むための良い方法は何ですか(大きな外部依存関係のライトバージョンを作成する)?誰かが前にそのようなことをしたと確信しています。

4

2 に答える 2

2

GLibはMSVCで正常にビルドされ、VisualStudioプロジェクトファイルを最新のtarballで出荷します。詳細については、GTK +MSVCwikiページを参照してください。

于 2012-05-10T16:05:41.430 に答える
1

関数のリストを見ていくと、glib2から何も取り出さないでください。自分で再実装するだけです(同様のプログラムで何度も実行しました。注意すべき点の1つは、MSVCRTとglib2の文字列関数がほとんどであるということです。同じように、あなたもそれらのために逃げることができます#define)。

私は今それらをもっと詳しく調べています、そして関数を複製するためにSTLとWin32を使うのに1時間か2時間以上かかるべきではありません。glib2関数を理解して抽出するには、それよりもはるかに長い時間がかかります。

いくつかのポインタ:slistはWin32で使用できますが、オブジェクトは異なります。STLと同じです。libGTSから直接STLを使用する方がおそらく良いでしょう。

当初思っていたほど悪くはありません。あなたはおそらく一晩ですべてをやってのけることができます。

于 2012-05-10T15:11:42.570 に答える