Git Product home page Git Product logo

iptux's Introduction

iptux: LAN communication software

Snapcraft CI CodeFactor Codacy Badge codecov CodeQL Weblate Translation Status

Install

Linux

Get it from the Snap Store

Mac OS X

brew tap iptux-src/iptux
brew install iptux

Build from source

Linux (Debian and Ubuntu)

sudo apt-get install git libgoogle-glog-dev libgtk-3-dev libglib2.0-dev libjsoncpp-dev g++ meson libsigc++-2.0-dev libayatana-appindicator3-dev appstream gettext
git clone git://github.com/iptux-src/iptux.git
cd iptux
meson setup build
meson compile -C build # or "ninja -C build" if meson version < 0.54
sudo meson install -C build
iptux

Mac OS X

brew install meson gettext gtk+3 jsoncpp glog gtk-mac-integration libsigc++@2 appstream
git clone git://github.com/iptux-src/iptux.git
cd iptux
meson setup build
meson install -C build
iptux

Usage

  • adjust firewall to allow use the TCP/UDP 2425 port.
  • then run iptux.

Compatible list

check https://github.com/iptux-src/iptux/wiki/Compatible-List

Develop

  • use meson setup -Ddev=true build to build an iptux which can use resource in source directory.
  • start 2 iptux on one machine for test
    • It's a known bug that you can not send file between 127.0.0.2 and 127.0.0.3
iptux -b 127.0.0.2 &
iptux -b 127.0.0.3 &

Contributing

How to update po/iptux.pot

meson setup build
meson compile update-po -C build

Stats

Alt

iptux's People

Contributors

anthonyfok avatar codacy-badger avatar comradekingu avatar freddii avatar ftoledo avatar gxcast avatar jiegec avatar kovalevartem avatar lidaobing avatar nightsharp avatar r-value avatar santossi avatar vancepym avatar wangbingmaster avatar weblate avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iptux's Issues

[REGRESSION] Missing systray icon

IIRC, some versions ago (not remember the version though), iptux had a systray icon.
But now the icon is missing.

Causing user unable to re-open the main window from systray icon.

Conflict with iPhone's IPMSG

After Opening the iptux ,and the iPhone's IPMSG would quit as it open.
打开iptux后,iphone上的飞鸽传书会闪退。

UpdateFileSendUI函数出现两处段错误

在发送接收文件时,发现断在这里了。
treeview = GTK_TREE_VIEW(g_datalist_get_data(&(dlggrp->widset),
"file-send-treeview-widget"));

pbar = GTK_WIDGET(g_datalist_get_data(&(dlggrp->widset),
                                      "file-send-progress-bar-widget"));

具体溢出的函数另一个不记得了,有一个是:gtk_tree_model_get_valist

小白make出错

系统:ubuntu14.04-5
cmake版本3.10.1
错误信息:
-- Checking for modules 'glib-2.0>=2.32.0;gthread-2.0>=2.14.0;gtk+-2.0>=2.16.0;jsoncpp>=1.0'
-- Requested 'jsoncpp >= 1.0' but version of jsoncpp is 0.6.0
CMake Error at /usr/cmake-3.10.1-Linux-x86_64/share/cmake-3.10/Modules/FindPkgConfig.cmake:415 (message):
A required package was not found
Call Stack (most recent call first):
/usr/cmake-3.10.1-Linux-x86_64/share/cmake-3.10/Modules/FindPkgConfig.cmake:593 (_pkg_check_modules_internal)
src/iptux/CMakeLists.txt:1 (pkg_check_modules)

-- Configuring incomplete, errors occurred!
See also "/home/fenghuan/iptux/build/CMakeFiles/CMakeOutput.log".
See also "/home/fenghuan/iptux/build/CMakeFiles/CMakeError.log".

File Size always zero in linux

Hi, I have downloaded the latest master release. There seems to be an issue when I select single file. The file size is always zero and files are not getting transfered.

I was able to debug the issue. In AnalogFs.cpp you are calling a function called ftwsize. To this function the file path is sent which actually contains the filename with full path. when opendir is called, which actually files as it is a regular file and not directory. hence the bytes always returns 0(file->filesize = afs.ftwsize(file->filepath); //不得不计算文件长度了). Sorry I couldnt interpret your comments.

Could you fix this. Here is the change i have made.

int64_t AnalogFS::ftwsize(const char dir_name)
{
int64_t sumsize = 0;
struct stat64 st;
if(stat64(dir_name, &st) == -1) {
return sumsize;
}
if(S_ISREG(st.st_mode)) {
sumsize += st.st_size;
return sumsize;
}
DIR
dir = opendir(dir_name);
if(dir == NULL) {
pwarning(_("opendir on "%s" failed: %s"), dir_name, strerror(errno));
return 0;
}

    struct dirent *dirt;

    while(dirt = readdir(dir)) {
            if(strcmp(dirt->d_name, ".") == 0) {
                    continue;
            }
            if(strcmp(dirt->d_name, "..") == 0) {
                    continue;
            }
            char tpath[MAX_PATHLEN];
            strcpy(tpath, dir_name);
            mergepath(tpath, dirt->d_name);
            struct stat64 st;
            if(stat64(tpath, &st) == -1) {
                    continue;
            }
            if(S_ISDIR(st.st_mode)) {
                    sumsize += ftwsize(tpath);
            } else if(S_ISREG(st.st_mode)) {
                    sumsize += st.st_size;
            } else {
                    // ignore other files
            }

    }
    return sumsize;

}

我发现的两个bug

1.关于界面 ,还是原来的连接,跳到谷歌code了
2.用kde桌面,系统托盘图标加载不了图标,但是可以右键,而且右键菜单正常.

mac 10.9 make 报错

mac 10.9 make 报错 >_<

/Applications/Xcode.app/Contents/Developer/usr/bin/make all-recursive
Making all in src
g++ -DHAVE_CONFIG_H -I. -I.. -I/usr/local/Cellar/glib/2.38.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.38.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -D_REENTRANT -I/usr/local/Cellar/glib/2.38.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.38.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -D_REENTRANT -I/opt/X11/include/cairo -I/opt/X11/include/pixman-1 -I/opt/X11/include/libpng15 -I/opt/X11/include -I/opt/X11/include/libpng15 -I/opt/X11/include -I/opt/X11/include/freetype2 -I/opt/X11/include -I/opt/X11/include/freetype2 -I/opt/X11/include -I/usr/local/Cellar/gtk+/2.24.22/include/gtk-2.0 -I/usr/local/Cellar/gtk+/2.24.22/lib/gtk-2.0/include -I/usr/local/Cellar/pango/1.36.0/include/pango-1.0 -I/usr/local/Cellar/atk/2.10.0/include/atk-1.0 -I/usr/local/Cellar/gdk-pixbuf/2.30.1/include/gdk-pixbuf-2.0 -I/usr/local/Cellar/pango/1.36.0/include/pango-1.0 -I/usr/local/Cellar/harfbuzz/0.9.23/include/harfbuzz -I/usr/local/Cellar/pango/1.36.0/include/pango-1.0 -I/usr/local/Cellar/glib/2.38.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.38.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -DORBIT2=1 -D_REENTRANT -I/usr/local/Cellar/gconf/3.2.5/include/gconf/2 -I/usr/local/Cellar/orbit/2.14.19/include/orbit-2.0 -I/usr/local/Cellar/glib/2.38.1/include/glib-2.0 -I/usr/local/Cellar/glib/2.38.1/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/opt/gettext/include -Wall -g -O2 -MT AnalogFS.o -MD -MP -MF .deps/AnalogFS.Tpo -c -o AnalogFS.o AnalogFS.cpp
AnalogFS.cpp:80:57: warning: second argument to 'va_arg' is of promotable type
'mode_t' (aka 'unsigned short'); this va_arg has undefined behavior
because arguments will be promoted to 'int'
if ((fd = ::open(tfn, flags, va_arg(ap, mode_t))) == -1)
^~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/include/stdarg.h:35:50: note:
expanded from macro 'va_arg'

define va_arg(ap, type) __builtin_va_arg(ap, type)

                                             ^

AnalogFS.cpp:85:59: warning: second argument to 'va_arg' is of promotable type
'mode_t' (aka 'unsigned short'); this va_arg has undefined behavior
because arguments will be promoted to 'int'
if ((fd = ::open(tpath, flags, va_arg(ap, mode_t))) == -1)
^~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/include/stdarg.h:35:50: note:
expanded from macro 'va_arg'

define va_arg(ap, type) __builtin_va_arg(ap, type)

                                             ^

AnalogFS.cpp:107:25: warning: 'stat64' is deprecated: first deprecated in OS X
10.6 [-Wdeprecated-declarations]
if ((result = ::stat64(tpath, st)) != 0)
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/stat.h:380:5: note:
'stat64' declared here
int stat64(const char , struct stat64 *) __OSX_AVAILABLE_BUT_DEPREC...
^
AnalogFS.cpp:160:23: error: assigning to 'struct entry *' from incompatible type
'struct entry *'
while ( (item = head.lh_first)) {
^ ~~~~~~~~~~~~~
AnalogFS.cpp:169:32: warning: 'stat64' is deprecated: first deprecated in OS X
10.6 [-Wdeprecated-declarations]
mark: if ((::stat64(tpath, &st) == -1)
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/stat.h:380:5: note:
'stat64' declared here
int stat64(const char *, struct stat64 *) _OSX_AVAILABLE_BUT_DEPREC...
^
AnalogFS.cpp:177:33: error: assigning to 'struct entry *' from incompatible type
'struct entry *'
LIST_INSERT_HEAD(&head, item, entries);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/queue.h:501:31: note:
expanded from macro 'LIST_INSERT_HEAD'
if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL)
^ ~~~~~~~~~~~~~~~~~~
AnalogFS.cpp:177:33: error: member access into incomplete type 'struct entry'
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/queue.h:502:21: note:
expanded from macro 'LIST_INSERT_HEAD'
LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);
^
AnalogFS.cpp:148:29: note: forward declaration of 'entry'
LIST_HEAD(listhead, entry) head;
^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/queue.h:420:9: note:
expanded from macro 'LIST_HEAD'
struct type *lh_first; /
first element /
^
AnalogFS.cpp:177:33: error: assigning to 'struct entry *' from incompatible type
'struct entry *'
LIST_INSERT_HEAD(&head, item, entries);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/queue.h:503:21: note:
expanded from macro 'LIST_INSERT_HEAD'
LIST_FIRST((head)) = (elm);
^ ~~~~~
AnalogFS.cpp:177:33: error: assigning to 'struct entry *
' from incompatible
type 'struct entry *
'
LIST_INSERT_HEAD(&head, item, entries);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/sys/queue.h:504:23: note:
expanded from macro 'LIST_INSERT_HEAD'
(elm)->field.le_prev = &LIST_FIRST((head));
^ ~~~~~~~~~~~~~~~~~~~
4 warnings and 5 errors generated.
make[2]: *_* [AnalogFS.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

设置自动隐藏面板之后窗口无法显示了

设置自动隐藏面板之后每次启动都会自动隐藏iptux的窗口,收到消息可以听见提示音但是无法打开窗口,导致无法使用。

根据网上的帮助删除~/.gconf/apps/iptux和执行gconftool-2 --recursive-unset /apps/iptux也不管用。


elementary OS 0.4.1 Loki (基于 "Ubuntu 16.04.3 LTS" 构建)

拼写错误修复

-> % codespell --quiet=3                                     
./src/iptux/HelpDialog.cpp:104: Contributers  ==> Contributors
./src/iptux/ipmsg.h:105: compatibilty  ==> compatibility
./src/iptux/output.cpp:42: Infomation  ==> Information

请在下一版本中进行修复。

Ubuntu14.04界面错误

Ubuntu14.04下界面会一直收缩,最后成很细的一列,按钮什么的都被盖了

0.7.2 版右键点击托盘图标崩溃

桌面:Debian Unstable + KDE Plasma 5

如需更多调试信息可以再和我说。

(gdb) r
Starting program: /usr/bin/iptux 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffebd4b700 (LWP 24464)]
[New Thread 0x7fffeb54a700 (LWP 24465)]
[New Thread 0x7fffe22bf700 (LWP 24466)]
[New Thread 0x7fffe1abe700 (LWP 24468)]
[New Thread 0x7fffe12bd700 (LWP 24469)]
[New Thread 0x7fffe0abc700 (LWP 24470)]
[New Thread 0x7fffcffff700 (LWP 24471)]
[Thread 0x7fffcffff700 (LWP 24471) exited]
[New Thread 0x7fffcffff700 (LWP 24472)]
[Thread 0x7fffcffff700 (LWP 24472) exited]
[New Thread 0x7fffcffff700 (LWP 24473)]
[Thread 0x7fffcffff700 (LWP 24473) exited]
[Thread 0x7fffe0abc700 (LWP 24470) exited]
[New Thread 0x7fffcffff700 (LWP 24474)]
[Thread 0x7fffcffff700 (LWP 24474) exited]

Thread 1 "iptux" received signal SIGSEGV, Segmentation fault.
iptux::StatusIcon::CreatePopupMenu (this=0x0) at ./src/iptux/StatusIcon.cpp:95
95      ./src/iptux/StatusIcon.cpp: 没有那个文件或目录.
(gdb) bt full
#0  iptux::StatusIcon::CreatePopupMenu (this=0x0) at ./src/iptux/StatusIcon.cpp:95
        menu = <optimized out>
        menuitem = <optimized out>
        image = <optimized out>
        window = <optimized out>
#1  0x00005555555823d1 in iptux::StatusIcon::onPopupMenu (statusicon=<optimized out>, button=3, time=51993433, self=<optimized out>) at ./src/iptux/StatusIcon.cpp:209
        menu = <optimized out>
#2  0x00007ffff6b18f9d in g_closure_invoke (closure=0x5555558bede0, return_value=0x0, n_param_values=3, param_values=0x7fffffffcf40, invocation_hint=0x7fffffffcec0) at ../../../../gobject/gclosure.c:804
        marshal = 0x7ffff78cb980 <_gtk_marshal_VOID__UINT_UINT>
        marshal_data = 0x0
        in_marshal = 0
        real_closure = 0x5555558bedc0
        __func__ = "g_closure_invoke"
#3  0x00007ffff6b2bcce in signal_emit_unlocked_R (node=node@entry=0x555555864580, detail=detail@entry=0, instance=instance@entry=0x5555558178a0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffcf40) at ../../../../gobject/gsignal.c:3635
        tmp = <optimized out>
        handler = 0x5555558be4c0
        accumulator = 0x0
        emission = {next = 0x7fffffffd3a0, instance = 0x5555558178a0, ihint = {signal_id = 124, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4}
        handler_list = 0x5555558be4c0
        return_accu = 0x0
        accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        signal_id = 124
        max_sequential_handler_number = 411
        return_value_altered = 1
#4  0x00007ffff6b344a5 in g_signal_emit_valist (instance=0x5555558178a0, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffd130) at ../../../../gobject/gsignal.c:3391
        instance_and_params = 0x7fffffffcf40
        signal_return_type = 4
        param_values = 0x7fffffffcf58
        i = <optimized out>
        n_params = 2
        __func__ = "g_signal_emit_valist"
#5  0x00007ffff6b34ebf in g_signal_emit (instance=instance@entry=0x5555558178a0, signal_id=<optimized out>, detail=detail@entry=0) at ../../../../gobject/gsignal.c:3447
        var_args = {{gp_offset = 40, fp_offset = 48, overflow_arg_area = 0x7fffffffd210, reg_save_area = 0x7fffffffd150}}
#6  0x00007ffff793cee9 in emit_popup_menu_signal (activate_time=<optimized out>, button=<optimized out>, status_icon=0x5555558178a0) at ./gtk/gtkstatusicon.c:1324
No locals.
#7  gtk_status_icon_button_press (status_icon=status_icon@entry=0x5555558178a0, event=0x555555c5c520) at ./gtk/gtkstatusicon.c:1782
        handled = 0
#8  0x00007ffff78c8a4b in _gtk_marshal_BOOLEAN__BOXED (closure=0x5555558a5830, return_value=0x7fffffffd3d0, n_param_values=<optimized out>, param_values=0x7fffffffd430, invocation_hint=<optimized out>, marshal_data=<optimized out>) at ./gtk/gtkmarshalers.c:86
        callback = 0x7ffff793ce40 <gtk_status_icon_button_press>
        cc = 0x5555558a5830
        data1 = 0x5555558178a0
        data2 = <optimized out>
        v_return = <optimized out>
        __func__ = "_gtk_marshal_BOOLEAN__BOXED"
#9  0x00007ffff6b18f9d in g_closure_invoke (closure=0x5555558a5830, return_value=0x7fffffffd3d0, n_param_values=2, param_values=0x7fffffffd430, invocation_hint=0x7fffffffd3b0) at ../../../../gobject/gclosure.c:804
        marshal = 0x7ffff78c89e0 <_gtk_marshal_BOOLEAN__BOXED>
        marshal_data = 0x0
        in_marshal = 0
        real_closure = 0x5555558a5810
        __func__ = "g_closure_invoke"
#10 0x00007ffff6b2bcce in signal_emit_unlocked_R (node=node@entry=0x55555581fa00, detail=detail@entry=0, instance=instance@entry=0x555555867080, emission_return=emission_return@entry=0x7fffffffd550, instance_and_params=instance_and_params@entry=0x7fffffffd430) at ../../../../gobject/gsignal.c:3635
        tmp = <optimized out>
        handler = 0x55555581de40
        accumulator = 0x55555581f7b0
        emission = {next = 0x0, instance = 0x555555867080, ihint = {signal_id = 33, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4}
        handler_list = 0x55555581de40
        return_accu = 0x7fffffffd3d0
        accu = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        signal_id = 33
        max_sequential_handler_number = 411
        return_value_altered = 0
#11 0x00007ffff6b33e3f in g_signal_emit_valist (instance=0x555555867080, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffd600) at ../../../../gobject/gsignal.c:3401
        return_value = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        error = 0x0
        rtype = 20
        static_scope = 0
        instance_and_params = 0x7fffffffd430
        signal_return_type = 20
        param_values = 0x7fffffffd448
        i = <optimized out>
        n_params = 1
        __func__ = "g_signal_emit_valist"
#12 0x00007ffff6b34ebf in g_signal_emit (instance=instance@entry=0x555555867080, signal_id=<optimized out>, detail=detail@entry=0) at ../../../../gobject/gsignal.c:3447
        var_args = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd6e0, reg_save_area = 0x7fffffffd620}}
#13 0x00007ffff79de34c in gtk_widget_event_internal (widget=widget@entry=0x555555867080, event=event@entry=0x555555c5c520) at ./gtk/gtkwidget.c:5010
        signal_num = <optimized out>
        return_val = 0
#14 0x00007ffff79de5e7 in IA__gtk_widget_event (widget=widget@entry=0x555555867080, event=event@entry=0x555555c5c520) at ./gtk/gtkwidget.c:4807
        __func__ = "IA__gtk_widget_event"
#15 0x00007ffff78c71ec in IA__gtk_propagate_event (widget=0x555555867080, event=0x555555c5c520) at ./gtk/gtkmain.c:2501
        tmp = <optimized out>
        handled_event = <optimized out>
        __func__ = "IA__gtk_propagate_event"
#16 0x00007ffff78c75eb in IA__gtk_main_do_event (event=<optimized out>) at ./gtk/gtkmain.c:1696
        grab_widget = 0x555555867080
        window_group = <optimized out>
        tmp_list = <optimized out>
        event_widget = <optimized out>
        event = 0x555555c5c520
#17 0x00007ffff753cf2c in gdk_event_dispatch (source=source@entry=0x555555807490, callback=<optimized out>, user_data=<optimized out>) at ./gdk/x11/gdkevents-x11.c:2425
        display = <optimized out>
        event = 0x555555c5c520
#18 0x00007ffff7218fb7 in g_main_dispatch (context=0x555555807580) at ../../../../glib/gmain.c:3165
        dispatch = 0x7ffff753cee0 <gdk_event_dispatch>
        prev_source = 0x0
        was_in_call = 0
        user_data = 0x0
        callback = 0x0
        cb_funcs = <optimized out>
        cb_data = 0x0
        need_destroy = <optimized out>
        source = 0x555555807490
        current = 0x555555a15270
        i = 0
#19 g_main_context_dispatch (context=context@entry=0x555555807580) at ../../../../glib/gmain.c:3818
No locals.
#20 0x00007ffff72191f0 in g_main_context_iterate (context=0x555555807580, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3891
        max_priority = 2147483647
        timeout = 72
        some_ready = 1
        nfds = <optimized out>
        allocated_nfds = 3
        fds = 0x555555b061e0
#21 0x00007ffff7219502 in g_main_loop_run (loop=0x555555b127c0) at ../../../../glib/gmain.c:4087
        __func__ = "g_main_loop_run"
#22 0x00007ffff78c6617 in IA__gtk_main () at ./gtk/gtkmain.c:1268
        tmp_list = <optimized out>
        functions = 0x0
        init = <optimized out>
        loop = 0x555555b127c0
#23 0x000055555556fab0 in main (argc=<optimized out>, argv=<optimized out>) at ./src/main/iptux.cpp:188
        error = 0x0
        context = <optimized out>
        configPath = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x55555584b9d0 "/home/hosiet/.iptux/config.json"}, _M_string_length = 31, {_M_local_buf = "\037\000\000\000\000\000\000\000\352\336\336\367\377\177\000", _M_allocated_capacity = 31}}
        config = {fname = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x55555584b7a0 "/home/hosiet/.iptux/config.json"}, _M_string_length = 31, {_M_local_buf = "\037\000\000\000\000\000\000\000`\000\000\000\000\000\000", _M_allocated_capacity = 31}}, root = {static null = @0x5555557ceab0, static nullRef = @0x5555557ceab0, static minLargestInt = -9223372036854775808, static maxLargestInt = 9223372036854775807, static maxLargestUInt = 18446744073709551615, static minInt = -2147483648, static maxInt = 2147483647, static maxUInt = 4294967295, static minInt64 = -9223372036854775808, static maxInt64 = 9223372036854775807, static maxUInt64 = 18446744073709551615, value_ = {int_ = 93824995313648, uint_ = 93824995313648, real_ = 4.6355706905689429e-310, bool_ = 240, string_ = 0x5555558447f0 "\220?\204UUU", map_ = 0x5555558447f0}, type_ = Json::objectValue, allocated_ = 0, comments_ = 0x0, start_ = 0, limit_ = 134}}
        progdt = {nickname = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdc00 "hosiet"}, _M_string_length = 6, {_M_local_buf = "hosiet\000el\000\000\000\000\000\000\200", _M_allocated_capacity = 7277944976740413288}}, mygroup = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdc20 ""}, _M_string_length = 0, {_M_local_buf = '\000' <repeats 15 times>, _M_allocated_capacity = 0}}, myicon = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdc40 "icon-tux.png"}, _M_string_length = 12, {_M_local_buf = "icon-tux.png\000\000\000\200", _M_allocated_capacity = 8679971595301643113}}, path = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdc60 "/home/hosiet"}, _M_string_length = 12, {_M_local_buf = "/home/hosiet\000\000\000", _M_allocated_capacity = 8027718448462129199}}, sign = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdc80 ""}, _M_string_length = 0, {_M_local_buf = "\000\274\021\366\377\177\000\000\020\034\001\000\000\000\000", _M_allocated_capacity = 140737321745408}}, codeset = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdca0 "utf-16"}, _M_string_length = 6, {_M_local_buf = "utf-16\000\000I\251\336\365\377\177\000", _M_allocated_capacity = 59584842986613}}, encode = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdcc0 "utf-8"}, _M_string_length = 5, {_M_local_buf = "utf-8\000\000\000\060\034\001\000\000\000\000", _M_allocated_capacity = 241279857781}}, palicon = 0x55555584cd10 "icon-qq.png", font = 0x55555584ccf0 "Sans Serif 10", transtip = 0x55555584ce00 "/usr/share/iptux/sound/trans.ogg", msgtip = 0x55555584cda0 "/usr/share/iptux/sound/msg.ogg", volume = 0, sndfgs = 255 '\377', netseg = 0x0, urlregex = 0x55555584e2e0, xcursor = 0x55555584cdd0, lcursor = 0x555555858380, table = 0x555555813580, timestamp = {tv_sec = 1516323492, tv_usec = 844187}, config = @0x7fffffffda60, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, flags = 0 '\000'}
        mwin = {config = @0x7fffffffda60, progdt = @0x7fffffffdbf0, statusIcon = 0x7fffffffd9a0, widset = 0x555555927b40, mdlset = 0x5555558c3ee0, tmdllist = 0x5555558b8520, accel = 0x5555558be540, timerid = 8, windowConfig = {_vptr.WindowConfig = 0x5555557aa650 <vtable for iptux::WindowConfig+16>, width = 250, height = 510, prefix = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdb10 "main_window"}, _M_string_length = 11, {_M_local_buf = "main_window\000UU\000", _M_allocated_capacity = 7956021468484690285}}}}
        cthrd = {config = @0x7fffffffda60, tcpsock = 7, udpsock = 8, server = true, pallist = 0x555555a69eb0, rgllist = 0x555555a6c480, sgmlist = 0x555555a6c610, grplist = 0x555555a6c670, brdlist = 0x555555a6c800, blacklist = 0x0, msgline = {head = 0x0, tail = 0x0, length = 0}, pbn = 1, prn = 10000, pblist = 0x0, prlist = 0x0, ecsList = 0x0, passwd = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdbb0 ""}, _M_string_length = 0, {_M_local_buf = '\000' <repeats 15 times>, _M_allocated_capacity = 0}}, timerid = 26, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}}
        sicon = {config = @0x7fffffffda60, mwin = @0x7fffffffdab0, statusicon = 0x5555558178a0, timerid = 0, embedded = 1}
        lgsys = {fdc = 9, fds = 10}
        sndsys = {eltset = 0x1, timestamp = {tv_sec = 140737351937123, tv_usec = 1}, persist = false}
        port = <optimized out>

0.7.0 版点击托盘图标崩溃

% gdb /usr/bin/iptux
GNU gdb (Debian 7.12-6+b1) 7.12.0.20161007-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/iptux...Reading symbols from /usr/lib/debug/.build-id/0b/adfe5ccc582fbf048522e82f43d1cce347496d.debug...done.
done.
(gdb) set pagination off
(gdb) r
Starting program: /usr/bin/iptux 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Gtk-Message: (for origin information, set GTK_DEBUG): failed to retrieve property `gtk-primary-button-warps-slider' of type `gboolean' from rc file value "((GString*) 0x55555581b480)" of type `gboolean'
[New Thread 0x7fffeab8a700 (LWP 16967)]
[New Thread 0x7fffea389700 (LWP 16968)]
[New Thread 0x7fffe3bdd700 (LWP 16969)]
[New Thread 0x7fffe33dc700 (LWP 16970)]
[New Thread 0x7fffe2bdb700 (LWP 16971)]
[New Thread 0x7fffe23da700 (LWP 16972)]
[New Thread 0x7fffe1bd9700 (LWP 16973)]
[Thread 0x7fffe1bd9700 (LWP 16973) exited]
[New Thread 0x7fffe1bd9700 (LWP 16974)]
[Thread 0x7fffe1bd9700 (LWP 16974) exited]
[New Thread 0x7fffe1bd9700 (LWP 16975)]
[Thread 0x7fffe1bd9700 (LWP 16975) exited]
[New Thread 0x7fffe1bd9700 (LWP 16976)]
[Thread 0x7fffe1bd9700 (LWP 16976) exited]
[Thread 0x7fffe23da700 (LWP 16972) exited]

Thread 1 "iptux" received signal SIGSEGV, Segmentation fault.
g_type_check_instance_cast (type_instance=0x5555558e2850, iface_type=iface_type@entry=80) at ../../../../gobject/gtype.c:4057
4057	../../../../gobject/gtype.c: 没有那个文件或目录.
(gdb) bt full
#0  g_type_check_instance_cast (type_instance=0x5555558e2850, iface_type=iface_type@entry=80) at ../../../../gobject/gtype.c:4057
        is_instantiatable = <optimized out>
        check = <optimized out>
#1  0x0000555555594c52 in StatusIcon::AlterStatusIconMode (this=0x55555586bf40) at ./src/StatusIcon.cpp:77
No locals.
#2  0x00005555555950e9 in StatusIcon::AlterInterfaceMode (this=0x55555586bf40) at ./src/StatusIcon.cpp:266
No locals.
#3  0x00007ffff6e2cf9d in g_closure_invoke (closure=0x5555558e3f10, return_value=0x0, n_param_values=1, param_values=0x7fffffffd0b0, invocation_hint=0x7fffffffd030) at ../../../../gobject/gclosure.c:804
        marshal = 0x7ffff6e2ee90 <g_cclosure_marshal_VOID__VOID>
        marshal_data = 0x0
        in_marshal = 0
        real_closure = 0x5555558e3ef0
        __func__ = "g_closure_invoke"
#4  0x00007ffff6e3fcce in signal_emit_unlocked_R (node=node@entry=0x555555875270, detail=detail@entry=0, instance=instance@entry=0x55555586bf40, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd0b0) at ../../../../gobject/gsignal.c:3635
        tmp = <optimized out>
        handler = 0x5555558b8ac0
        accumulator = 0x0
        emission = {next = 0x7fffffffd4e0, instance = 0x55555586bf40, ihint = {signal_id = 163, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4}
        handler_list = 0x5555558b8ac0
        return_accu = 0x0
        accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        signal_id = 163
        max_sequential_handler_number = 404
        return_value_altered = 1
#5  0x00007ffff6e484a5 in g_signal_emit_valist (instance=0x55555586bf40, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffd270) at ../../../../gobject/gsignal.c:3391
        instance_and_params = 0x7fffffffd0b0
        signal_return_type = 4
        param_values = 0x7fffffffd0c8
        i = <optimized out>
        n_params = 0
        __func__ = "g_signal_emit_valist"
#6  0x00007ffff6e48ebf in g_signal_emit (instance=instance@entry=0x55555586bf40, signal_id=<optimized out>, detail=detail@entry=0) at ../../../../gobject/gsignal.c:3447
        var_args = {{gp_offset = 24, fp_offset = 48, overflow_arg_area = 0x7fffffffd350, reg_save_area = 0x7fffffffd290}}
#7  0x00007ffff793cec9 in emit_activate_signal (status_icon=0x55555586bf40) at ./gtk/gtkstatusicon.c:1315
No locals.
#8  gtk_status_icon_button_press (status_icon=status_icon@entry=0x55555586bf40, event=0x555555c06430) at ./gtk/gtkstatusicon.c:1787
        handled = 0
        event = 0x555555c06430
        status_icon = 0x55555586bf40
        handled = 0
#9  0x00007ffff78c8a4b in _gtk_marshal_BOOLEAN__BOXED (closure=0x555555875c90, return_value=0x7fffffffd510, n_param_values=<optimized out>, param_values=0x7fffffffd570, invocation_hint=<optimized out>, marshal_data=<optimized out>) at ./gtk/gtkmarshalers.c:86
        callback = 0x7ffff793ce40 <gtk_status_icon_button_press>
        cc = 0x555555875c90
        data1 = 0x55555586bf40
        data2 = <optimized out>
        v_return = <optimized out>
        __func__ = "_gtk_marshal_BOOLEAN__BOXED"
#10 0x00007ffff6e2cf9d in g_closure_invoke (closure=0x555555875c90, return_value=0x7fffffffd510, n_param_values=2, param_values=0x7fffffffd570, invocation_hint=0x7fffffffd4f0) at ../../../../gobject/gclosure.c:804
        marshal = 0x7ffff78c89e0 <_gtk_marshal_BOOLEAN__BOXED>
        marshal_data = 0x0
        in_marshal = 0
        real_closure = 0x555555875c70
        __func__ = "g_closure_invoke"
#11 0x00007ffff6e3fcce in signal_emit_unlocked_R (node=node@entry=0x555555870dc0, detail=detail@entry=0, instance=instance@entry=0x555555859b60, emission_return=emission_return@entry=0x7fffffffd690, instance_and_params=instance_and_params@entry=0x7fffffffd570) at ../../../../gobject/gsignal.c:3635
        tmp = <optimized out>
        handler = 0x5555558b88c0
        accumulator = 0x555555870c80
        emission = {next = 0x0, instance = 0x555555859b60, ihint = {signal_id = 33, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4}
        handler_list = 0x5555558b88c0
        return_accu = 0x7fffffffd510
        accu = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        signal_id = 33
        max_sequential_handler_number = 404
        return_value_altered = 0
#12 0x00007ffff6e47e3f in g_signal_emit_valist (instance=0x555555859b60, signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffd740) at ../../../../gobject/gsignal.c:3401
        return_value = {g_type = 20, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}
        error = 0x0
        rtype = 20
        static_scope = 0
        instance_and_params = 0x7fffffffd570
        signal_return_type = 20
        param_values = 0x7fffffffd588
        i = <optimized out>
        n_params = 1
        __func__ = "g_signal_emit_valist"
#13 0x00007ffff6e48ebf in g_signal_emit (instance=instance@entry=0x555555859b60, signal_id=<optimized out>, detail=detail@entry=0) at ../../../../gobject/gsignal.c:3447
        var_args = {{gp_offset = 32, fp_offset = 48, overflow_arg_area = 0x7fffffffd820, reg_save_area = 0x7fffffffd760}}
#14 0x00007ffff79de34c in gtk_widget_event_internal (widget=widget@entry=0x555555859b60, event=event@entry=0x555555c06430) at ./gtk/gtkwidget.c:5010
        signal_num = <optimized out>
        return_val = 0
#15 0x00007ffff79de5e7 in IA__gtk_widget_event (widget=widget@entry=0x555555859b60, event=event@entry=0x555555c06430) at ./gtk/gtkwidget.c:4807
        __func__ = "IA__gtk_widget_event"
#16 0x00007ffff78c71ec in IA__gtk_propagate_event (widget=0x555555859b60, event=0x555555c06430) at ./gtk/gtkmain.c:2501
        tmp = <optimized out>
        handled_event = <optimized out>
        __func__ = "IA__gtk_propagate_event"
#17 0x00007ffff78c75eb in IA__gtk_main_do_event (event=<optimized out>) at ./gtk/gtkmain.c:1696
        grab_widget = 0x555555859b60
        window_group = <optimized out>
        tmp_list = <optimized out>
        event_widget = <optimized out>
        event = 0x555555c06430
#18 0x00007ffff753cf2c in gdk_event_dispatch (source=source@entry=0x5555558057a0, callback=<optimized out>, user_data=<optimized out>) at ./gdk/x11/gdkevents-x11.c:2425
        display = <optimized out>
        event = 0x555555c06430
#19 0x00007ffff6b53fb7 in g_main_dispatch (context=0x555555805890) at ../../../../glib/gmain.c:3165
        dispatch = 0x7ffff753cee0 <gdk_event_dispatch>
        prev_source = 0x0
        was_in_call = 0
        user_data = 0x0
        callback = 0x0
        cb_funcs = <optimized out>
        cb_data = 0x0
        need_destroy = <optimized out>
        source = 0x5555558057a0
        current = 0x5555559ffa00
        i = 0
#20 g_main_context_dispatch (context=context@entry=0x555555805890) at ../../../../glib/gmain.c:3818
No locals.
#21 0x00007ffff6b541f0 in g_main_context_iterate (context=0x555555805890, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../../../../glib/gmain.c:3891
        max_priority = 0
        timeout = 0
        some_ready = 1
        nfds = <optimized out>
        allocated_nfds = 3
        fds = 0x555555a447e0
#22 0x00007ffff6b54502 in g_main_loop_run (loop=0x555555bdbe40) at ../../../../glib/gmain.c:4087
        __func__ = "g_main_loop_run"
#23 0x00007ffff78c6617 in IA__gtk_main () at ./gtk/gtkmain.c:1268
        tmp_list = <optimized out>
        functions = 0x0
        init = <optimized out>
        loop = 0x555555bdbe40
#24 0x000055555556dfec in main (argc=<optimized out>, argv=<optimized out>) at ./src/iptux.cpp:92
        configPath = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x5555557cdbd0 "/home/hosiet/.iptux/config.json"}, _M_string_length = 31, {_M_local_buf = "\037\000\000\000\000\000\000\000\003\000\000\000\000\000\000", _M_allocated_capacity = 31}}
        config = {fname = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x5555557cdba0 "/home/hosiet/.iptux/config.json"}, _M_string_length = 31, {_M_local_buf = "\037\000\000\000\000\000\000\000`\000\000\000\000\000\000", _M_allocated_capacity = 31}}, root = {static null = @0x5555557ccab0, static nullRef = @0x5555557ccab0, static minLargestInt = -9223372036854775808, static maxLargestInt = 9223372036854775807, static maxLargestUInt = 18446744073709551615, static minInt = -2147483648, static maxInt = 2147483647, static maxUInt = 4294967295, static minInt64 = -9223372036854775808, static maxInt64 = 9223372036854775807, static maxUInt64 = 18446744073709551615, value_ = {int_ = 93824994838240, uint_ = 93824994838240, real_ = 4.6355706670806669e-310, bool_ = 224, string_ = 0x5555557d06e0 "", map_ = 0x5555557d06e0}, type_ = Json::objectValue, allocated_ = 0, comments_ = 0x0, start_ = 0, limit_ = 134}}
        progdt = {nickname = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdcf0 "hosiet"}, _M_string_length = 6, {_M_local_buf = "hosiet\000\000\000i9o)a", <incomplete sequence \302>, _M_allocated_capacity = 127978909691752}}, mygroup = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdd10 ""}, _M_string_length = 0, {_M_local_buf = '\000' <repeats 15 times>, _M_allocated_capacity = 0}}, myicon = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdd30 "icon-tux.png"}, _M_string_length = 12, {_M_local_buf = "icon-tux.png\000\000\000", _M_allocated_capacity = 8679971595301643113}}, path = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdd50 "/home/hosiet"}, _M_string_length = 12, {_M_local_buf = "/home/hosiet\000\000\000", _M_allocated_capacity = 8027718448462129199}}, sign = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdd70 ""}, _M_string_length = 0, {_M_local_buf = '\000' <repeats 15 times>, _M_allocated_capacity = 0}}, codeset = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdd90 "utf-16"}, _M_string_length = 6, {_M_local_buf = "utf-16\000\000I\251\336\365\377\177\000", _M_allocated_capacity = 59584842986613}}, encode = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffddb0 "utf-8"}, _M_string_length = 5, {_M_local_buf = "utf-8\000\000\000\060\034\001\000\000\000\000", _M_allocated_capacity = 241279857781}}, palicon = 0x5555558bbfc0 "icon-qq.png", font = 0x5555558bbfa0 "Sans Serif 10", transtip = 0x5555558bc0b0 "/usr/share/iptux/sound/trans.ogg", msgtip = 0x5555558bc050 "/usr/share/iptux/sound/msg.ogg", volume = 0, sndfgs = 255 '\377', netseg = 0x0, urlregex = 0x5555558bc110, xcursor = 0x5555558bc020, lcursor = 0x5555558bc0e0, table = 0x5555558b8140, timestamp = {tv_sec = 1515827730, tv_usec = 633121}, config = @0x7fffffffdb50, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}, flags = 0 '\000'}
        mwin = {config = @0x7fffffffdb50, progdt = @0x7fffffffdce0, statusIcon = 0x7fffffffdad0, widset = 0x5555559356b0, mdlset = 0x5555558e7d40, tmdllist = 0x5555558dd620, accel = 0x5555558b8b80, timerid = 8, windowConfig = {_vptr.WindowConfig = 0x5555557a86a0 <vtable for WindowConfig+16>, width = 250, height = 510, prefix = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdc00 "main_window"}, _M_string_length = 11, {_M_local_buf = "main_window\000UU\000", _M_allocated_capacity = 7956021468484690285}}}}
        cthrd = {config = @0x7fffffffdb50, tcpsock = 7, udpsock = 8, server = true, pallist = 0x555555a58990, rgllist = 0x555555a5bb60, sgmlist = 0x555555a5bbc0, grplist = 0x555555a5bc50, brdlist = 0x555555a5bcb0, blacklist = 0x0, msgline = {head = 0x0, tail = 0x0, length = 0}, pbn = 1, prn = 10000, pblist = 0x0, prlist = 0x0, ecsList = 0x0, passwd = {static npos = 18446744073709551615, _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0x7fffffffdca0 ""}, _M_string_length = 0, {_M_local_buf = '\000' <repeats 15 times>, _M_allocated_capacity = 0}}, timerid = 26, mutex = {__data = {__lock = 0, __count = 0, __owner = 0, __nusers = 0, __kind = 0, __spins = 0, __elision = 0, __list = {__prev = 0x0, __next = 0x0}}, __size = '\000' <repeats 39 times>, __align = 0}}
        sicon = {config = @0x7fffffffdb50, mwin = @0x7fffffffdba0, statusicon = 0x55555586bf40, timerid = 0, embedded = 32767}
        lgsys = {fdc = 9, fds = 10}
        sndsys = {eltset = 0x7fffffffdec0, timestamp = {tv_sec = 140737351966442, tv_usec = 140737329959784}, persist = 176}
        port = <optimized out>
(gdb) 

系统环境: Debian Unstable

iptux --version does not work w/o DISPLAY env

iptux --help has similar problem

$ unset DISPLAY; iptux --version; echo $?

(process:33229): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.

(iptux:33229): Gtk-WARNING **: cannot open display:
GConf Error: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details -  1: Not running within active session)
GConf Error: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details -  1: Not running within active session)
GConf Error: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details -  1: Not running within active session)
GConf Error: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details -  1: Not running within active session)
GConf Error: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details -  1: Not running within active session)
1

考虑继承 CMAKE_C*_FLAGS 而非从头开始设置

考虑 https://github.com/iptux-src/iptux/blob/master/CMakeLists.txt#L16https://github.com/iptux-src/iptux/blob/master/CMakeLists.txt#L17

这里直接重设了 CMAKE_C*_FLAGS,会导致构建系统对这些变量的设定值丢失,尤其是 -g

建议解决方案:

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 733e268..bcb4dad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,8 +13,8 @@ include(FindPkgConfig)
 include(FindGettext)
 include(FindIntl)
 
-set(CMAKE_C_FLAGS "-Wall -O2")
-set(CMAKE_CXX_FLAGS "-Wall -O2")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")
 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGSEAL_ENABLE")
 
 if(NOT Intl_FOUND)

build failed under Linux

$ uname -a
Linux lidaobing-VirtualBox 3.8.0-19-generic #29-Ubuntu SMP Wed Apr 17 18:16:28 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
$ make
make  all-recursive
make[1]: Entering directory `/home/lidaobing/workspace/iptux'
Making all in src
make[2]: Entering directory `/home/lidaobing/workspace/iptux/src'
g++ -DHAVE_CONFIG_H -I. -I..  -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include   -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/harfbuzz   -pthread -I/usr/include/gconf/2 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include      -Wall -g -O2 -MT utils.o -MD -MP -MF .deps/utils.Tpo -c -o utils.o utils.cpp
utils.cpp: In function ‘void get_file_system_info(const char*, int64_t*, int64_t*)’:
utils.cpp:136:25: error: aggregate ‘get_file_system_info(const char*, int64_t*, int64_t*)::statfs64 st’ has incomplete type and cannot be defined
utils.cpp:139:44: error: invalid use of incomplete type ‘struct get_file_system_info(const char*, int64_t*, int64_t*)::statfs64’
utils.cpp:136:16: error: forward declaration of ‘struct get_file_system_info(const char*, int64_t*, int64_t*)::statfs64’
make[2]: *** [utils.o] Error 1
make[2]: Leaving directory `/home/lidaobing/workspace/iptux/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/lidaobing/workspace/iptux'
make: *** [all] Error 2

make dist failed

$ make dist
make  dist-bzip2 dist-gzip am__post_remove_distdir='@:'
if test -d "iptux-0.5.3"; then find "iptux-0.5.3" -type d ! -perm -200 -exec chmod u+w {} ';' && rm -rf "iptux-0.5.3" || { sleep 5 && rm -rf "iptux-0.5.3"; }; else :; fi
test -d "iptux-0.5.3" || mkdir "iptux-0.5.3"
 (cd src && make  top_distdir=../iptux-0.5.3 distdir=../iptux-0.5.3/src \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
 (cd desktop && make  top_distdir=../iptux-0.5.3 distdir=../iptux-0.5.3/desktop \
     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)
cp: ../iptux-0.5.3/desktop/hicolor/64x64/apps/ip-tux.png: No such file or directory
make[2]: *** [distdir] Error 1
make[1]: *** [distdir] Error 1
make: *** [dist] Error 2

请更新 https://code.launchpad.net/iptux 所指向的上游 VCS 仓库

@lidaobing 您好:

iptux 的 Launchpad 页面仍然指向旧的 SVN 仓库 http://iptux.googlecode.com/svn/trunk/ ,因而无法取得 GitHub 上 git 仓库的最新代码。现在 Launchpad 和 GitHub 上的 iptux 代码似乎已经有三年半的差距了。

因为 iptux 的 README.md 鼓励贡献者通过 Launchpad 来对 iptux 进行翻译,所以如果可以让 Launchpad 跟 GitHub 同步,那就最好不过了。 :-)

非常感谢!

Anthony

iptux: Depends on gconf

from: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=886064

Source: iptux
Version: 0.6.4-1
Severity: important
User: [email protected]
Usertags: oldlibs gconf
Tags: sid buster

Your package depends or build-depends on gconf, but gconf will be
removed from Debian soon.

gconf's last release was about 5 years ago. It has been replaced by
gsettings (provided in Debian by source glib2.0 )

References

https://developer.gnome.org/gio/stable/ch34.html
https://developer.gnome.org/gio/stable/GSettings.html

On behalf of the Debian GNOME team,
Jeremy Bicha

Please add me as a collaborator

Hello Daobing,

Please add me as a collaborator to this project.

No, I do not want to adopt iptux. I am a perfect example of 三分钟热度, and suddenly got the urge to work on iptux because I saw a "removal from testing" notice and panicked, but otherwise, I tend to come and go randomly, leaving a package untouched for years until something alarms me to it. :-)

But I would be very happy to be your little helper, i.e. a Collaborator in GitHub-speak, so that I can help sort out Issues and Pull Requests, and probably commit a tiny patch to fix minor problems, 偶尔的小修小补 is enough for me. :-)

Many thanks!

Anthony

fix autoreconf warnings

$ autoreconf -i
aclocal: warning: autoconf input should be named 'configure.ac', not 'configure.in'
autoheader: WARNING: Using auxiliary files such as `acconfig.h', `config.h.bot'
autoheader: WARNING: and `config.h.top', to define templates for `config.h.in'
autoheader: WARNING: is deprecated and discouraged.
autoheader: 
autoheader: WARNING: Using the third argument of `AC_DEFINE' and
autoheader: WARNING: `AC_DEFINE_UNQUOTED' allows one to define a template without
autoheader: WARNING: `acconfig.h':
autoheader: 
autoheader: WARNING:   AC_DEFINE([NEED_FUNC_MAIN], 1,
autoheader:         [Define if a function `main' is needed.])
autoheader: 
autoheader: WARNING: More sophisticated templates can also be produced, see the
autoheader: WARNING: documentation.
automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
automake: warning: autoconf input should be named 'configure.ac', not 'configure.in'
src/Makefile.am:13: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
src/uninstall/Makefile.am:8: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')

Mac下的安装方式纠正

brew install gettext gtk+ gconf cmake
brew link gettext --force
git clone git://github.com/iptux-src/iptux.git
cd iptux
cmake .
make
sudo make install

CentOS and RHEL安装方式

sudo yum install git gtk2-devel glib2-devel GConf2-devel gstreamer1-devel gcc gcc-c++ make cmake3
sudo yum remove cmake
sudo ln -s /usr/bin/cmake3 /usr/bin/cmake

git clone git://github.com/iptux-src/iptux.git
cd iptux
mkdir build && cd build && cmake .. && make
sudo make install

sudo firewall-cmd --permanent --zone=public --add-port=2425/tcp
sudo firewall-cmd --permanent --zone=public --add-port=2425/udp
sudo firewall-cmd --complete-reload

iptux

由于只调用/usr/bin/cmake,又要求cmake版本为3,所以做了个软链接。最后是开防火墙2425端口的TCP和UDP。
以上在CentOS 7下成功安装,理论上RHEL和Fedora方式相同,未验证。

求助,传目录报错

系统是centos7
iptux版本是0.6.2
传目录时控制台报下面的错误:
(iptux:31165): GLib-GObject-CRITICAL **: g_object_get_data: assertion `G_IS_OBJECT (object)' failed

直接点关闭后,重新打开时报端口被占用

opensuse 13.2,KDE桌面。

直接点关闭后程序图形界面没了,托盘区也没有图标,但是在ps -u user命令中可以看到进程仍在运行。

重新打开程序报端口被占用。

建议关闭按钮改为最小化窗口。

发现bug

在DialogBase.ccp的176-188
if (stat64((const char )tlist->data, &st) == -1
|| !(S_ISREG(st.st_mode) || S_ISDIR(st.st_mode))) {
tlist = g_slist_next(tlist);
continue;
}
这里跳过了全部的非普通文件类型的文件,
/
获取文件类型图标 /
if (S_ISREG(st.st_mode))
pixbuf = rpixbuf;
else if (S_ISDIR(st.st_mode))
pixbuf = dpixbuf;
else
pixbuf = NULL;
filesize = afs.ftwsize((char *)tlist->data); 这里调用AnalogFS::ftwsize来获取文件的大小,但是这里:
DIR
dir = opendir(dir_name);
if(dir == NULL) {
pwarning(_("opendir on "%s" failed: %s"), dir_name, strerror(errno));
return 0;
}
却只处理目录,导致返回的普通文件类型的大小全是0,因此没有办法发送单个文件

不知道是不是bug

crash on DialogPeer::~DialogPeer

export G_DEBUG=fatal-warnings

(gdb) bt
#0  0x00007ffff6b54961 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007ffff6b55c4b in g_logv () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007ffff6b55d9f in g_log () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007ffff6b4db0c in g_source_remove () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x000055555557ff5a in DialogPeer::~DialogPeer() ()
#5  0x000055555557ff79 in DialogPeer::~DialogPeer() ()
#6  0x00007ffff6e27f9d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7  0x00007ffff6e3acde in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007ffff6e434b5 in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9  0x00007ffff6e43ecf in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#10 0x00007ffff78ea720 in gtk_object_dispose (gobject=0x555555846bf0) at ./gtk/gtkobject.c:421
#11 0x00007ffff6e2e688 in g_object_run_dispose () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#12 0x00007ffff6e27f9d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#13 0x00007ffff6e3acde in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#14 0x00007ffff6e434b5 in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#15 0x00007ffff6e43ecf in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#16 0x00007ffff7820475 in gtk_real_button_released (button=0x5555559d0b60) at ./gtk/gtkbutton.c:1712
#17 0x00007ffff6e27f9d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#18 0x00007ffff6e3adae in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#19 0x00007ffff6e434b5 in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#20 0x00007ffff6e43ecf in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#21 0x00007ffff781f3f9 in gtk_button_button_release (widget=widget@entry=0x5555559d0b60, event=<optimized out>) at ./gtk/gtkbutton.c:1604
#22 0x00007ffff78c4b7b in _gtk_marshal_BOOLEAN__BOXED (closure=0x555555815630, return_value=0x7fffffffd520, n_param_values=<optimized out>, param_values=0x7fffffffd580, invocation_hint=<optimized out>, marshal_data=<optimized out>) at gtkmarshalers.c:83
#23 0x00007ffff6e27f9d in g_closure_invoke () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#24 0x00007ffff6e3a758 in  () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#25 0x00007ffff6e42e4f in g_signal_emit_valist () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#26 0x00007ffff6e43ecf in g_signal_emit () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#27 0x00007ffff79daf9c in gtk_widget_event_internal (widget=widget@entry=0x5555559d0b60, event=event@entry=0x555555989f40) at ./gtk/gtkwidget.c:5017
#28 0x00007ffff79db237 in IA__gtk_widget_event (widget=widget@entry=0x5555559d0b60, event=event@entry=0x555555989f40) at ./gtk/gtkwidget.c:4814
#29 0x00007ffff78c331c in IA__gtk_propagate_event (widget=0x5555559d0b60, event=0x555555989f40) at ./gtk/gtkmain.c:2520
#30 0x00007ffff78c371b in IA__gtk_main_do_event (event=<optimized out>) at ./gtk/gtkmain.c:1710
#31 0x00007ffff7538f0c in gdk_event_dispatch (source=<optimized out>, callback=<optimized out>, user_data=<optimized out>) at ./gdk/x11/gdkevents-x11.c:2425
#32 0x00007ffff6b4efb7 in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00007ffff6b4f1f0 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00007ffff6b4f502 in g_main_loop_run () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#35 0x00007ffff78c2727 in IA__gtk_main () at ./gtk/gtkmain.c:1282
#36 0x000055555556dd52 in main ()

No theme index file.

$ gtk-update-icon-cache /usr/local/iptux/share/icons/hicolor/
gtk-update-icon-cache: No theme index file.
$ uname -r -m
3.17.2-1-ARCH x86_64

WM:awesome

??

error from compile

MainWindow.cpp:1529:37: error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive] if (g_strcmp0(remaining,'\0'))

can not build under OSX

$ uname -a
Darwin Lis-MacBook-Pro.local 12.3.0 Darwin Kernel Version 12.3.0: Sun Jan  6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64 x86_64
$ ./configure
checking whether to enable maintainer-specific portions of Makefiles... no
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking whether ln -s works... yes
checking whether make sets $(MAKE)... (cached) yes
checking for ranlib... ranlib
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking arpa/inet.h usability... yes
checking arpa/inet.h presence... yes
checking for arpa/inet.h... yes
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking for inttypes.h... (cached) yes
checking libintl.h usability... no
checking libintl.h presence... no
checking for libintl.h... no
checking locale.h usability... yes
checking locale.h presence... yes
checking for locale.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking for stdint.h... (cached) yes
checking for stdlib.h... (cached) yes
checking for string.h... (cached) yes
checking for strings.h... (cached) yes
checking sys/ioctl.h usability... yes
checking sys/ioctl.h presence... yes
checking for sys/ioctl.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking sys/vfs.h usability... no
checking sys/vfs.h presence... no
checking for sys/vfs.h... no
checking for unistd.h... (cached) yes
checking for stdbool.h that conforms to C99... yes
checking for _Bool... yes
checking for inline... inline
checking for int64_t... yes
checking for mode_t... yes
checking for size_t... yes
checking for ssize_t... yes
checking for uint16_t... yes
checking for uint32_t... yes
checking for uint8_t... yes
checking for pid_t... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking for bzero... yes
checking for endpwent... yes
checking for getcwd... yes
checking for gettimeofday... yes
checking for inet_ntoa... yes
checking for memchr... yes
checking for memmove... yes
checking for mkdir... yes
checking for rmdir... yes
checking for setlocale... yes
checking for socket... yes
checking for strcasecmp... yes
checking for strchr... yes
checking for strerror... yes
checking for strncasecmp... yes
checking for strpbrk... yes
checking for strrchr... yes
checking for strspn... yes
checking for pkg-config... /usr/local/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for GLIB... yes
checking for GTHREAD... yes
checking for GTK... no
configure: error: Package requirements (gtk+-2.0 >= 2.12.0) were not met:

Package 'xcb-shm', required by 'cairo', not found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GTK_CFLAGS
and GTK_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.