저는 VC2008 express를 사용하여 컴파일 된 개인 프로젝트에서 libGTS를 사용하고 있습니다.GLib2 + MSVC : 라이브러리의 "light"버전을 만들기 위해 GLib2를 실행하십시오.
짧은 버전
libGTS는 (AFAIK) VC2008 컴파일 할 수 없다 glib2에 의존한다. glib2의 관련 부분을 libGTS로 가져 와서 포크를 만들고 싶습니다. 이 문제에 접근하는 좋은 방법은 무엇입니까?
긴 버전 이미 cmake 빌드 시스템으로 변환 한 (원래 autotools를 사용) libGTS를 사용하려면
.
불행히도 libGTS는 libiconv, libintl, pcre, libFFI (최신 버전), pkg-config에 의존합니다. 여기서 pkg-config는 glib2에 의존합니다. 나는. 순환 종속성.
내가 알 수있는 한, glib2는 자동 도구가 필요하고 Glib2 (및 모든 종속성)를 cmake와 같은 것으로 변환하기 때문에 VC2008 표현을 사용하여 컴파일 할 수 없습니다.
지금까지 mingw를 사용하여 glib2 빌드를 관리하고 msvc 빌드 lib12와 mingw 빌드 glib2를 연결했습니다 (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
그래서 나는 모든 외부 종속성 (의 iconv/libintl은 제거, libGTS에 입심의 관련 부분을 끌어 싶습니다 -이 서브 시스템은하지 않습니다 그들을 필요로합니다) 그리고 "깨끗한"포크를 만드십시오 (두 라이브러리 모두 LGPL입니다, github/bitbucket 서비스가 있으므로 문제는 아닙니다). "깨끗한"포크는 최소한의 외부 종속성을 의미합니다.
libgts (즉, "glib2lite"라이브러리 프로젝트가 들어있는 디렉토리)의 cmake 하위 디렉토리에 glib2 (개별 파일)의 개별 부분을 가져 오려고했지만 일반적으로 하나의 파일이 모든 것을 꺼내기 때문에 실제로 작동하지 않습니다. 그밖에. 나는 또한 libgts의 callgraph를 생성 해 냈지만 (실제로 사용되는 함수를 찾으려고), 결국에는 도움이되지 못했다.
그래서이 문제에 접근하는 좋은 방법은 무엇입니까? (큰 외부 종속성의 밝은 버전 만들기) 나는 누군가가 전에 그런 것을했다고 확신한다.
얼마나 중요합니까? 이 문제를 해결하는 데 더 쉬운 방법이있을 것입니다 ... Cygwin을 고려해 보셨습니까? –
@ MahmoudAl-Qudsi : "이게 얼마나 중요합니까?" 개인 프로젝트/연구, 나 자신을위한 글쓰기, 필자는 glib2가 가져 오는 모든 의존성을 필요로하지 않는다. "Cygwin을 고려해 보셨습니까?"Cygwin은 큰 NO입니다. 코드는 이식성이 있어야하며 Qt를 사용합니다. 유닉스 계열 에뮬레이트 된 시스템에 의존하는 것은 매우 나쁜 생각이다. 또한, cl.exe 내 경험에 따르면 Windows에서 더 나은 컴파일러 성능을 가지고 있습니다. – SigTerm
오, 그렇습니다. 개인 프로젝트에 가치가 있는지 없는지의 문제 :) –