1. Скачал wxWidget 2.8.12
2. Скомпилил с configure --disable-shared --with-expat=builtin --with-libjpeg=builtin \
--with-libpng=builtin --with-zlib=builtin \
--without-regex --without-libtiff
3. make install (в /usr/locale)
4. Качаю пример http://www.wxwidgets.org/docs/tutorials/hworld2.txt
5. Компилю$ g++ hworld2.cpp `wx-config --libs --cxxflags`;
Всё зашибись.
$ g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes`;
И тут вываливает туева хуча undefined reference
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_utilsx11.o): In function `wxGetKeyState(wxKeyCode)':
utilsx11.cpp:(.text+0x928): undefined reference to `XKeysymToKeycode'
utilsx11.cpp:(.text+0x95c): undefined reference to `XGetModifierMapping'
utilsx11.cpp:(.text+0x9f4): undefined reference to `XQueryPointer'
utilsx11.cpp:(.text+0x9fc): undefined reference to `XFreeModifiermap'
utilsx11.cpp:(.text+0xa42): undefined reference to `XQueryKeymap'
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_utilsx11.o): In function `wxWMspecSetState(_XDisplay*, unsigned long, unsigned long, int, unsigned long)':
window.cpp:(.text+0x4338): undefined reference to `XWarpPointer'
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_displayx11.o): In function `wxClientDisplayRect(int*, int*, int*, int*)':
displayx11.cpp:(.text+0x64): undefined reference to `XInternAtom'
displayx11.cpp:(.text+0xae): undefined reference to `XDefaultRootWindow'
displayx11.cpp:(.text+0x104): undefined reference to `XGetWindowProperty'
displayx11.cpp:(.text+0x126): undefined reference to `XFree'
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_displayx11.o): In function `wxDisplayImplX11::GetCurrentMode() const':
displayx11.cpp:(.text+0x214): undefined reference to `XFree'
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_displayx11.o): In function `wxDisplayFactoryX11::GetFromPoint(wxPoint const&)':
displayx11.cpp:(.text+0x320): undefined reference to `XFree'
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_displayx11.o): In function `wxDisplayImplX11::ChangeMode(wxVideoMode const&)':
displayx11.cpp:(.text+0x3e8): undefined reference to `XFree'
displayx11.cpp:(.text+0x3fe): undefined reference to `XFree'
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_displayx11.o):displayx11.cpp:(.text+0x52d): more undefined references to `XFree' follow
/usr/local/lib/libglib-2.0.a(gregex.o): In function `get_matched_substring_number':
(.text+0x1c0b): undefined reference to `pcre_get_stringnumber'
/usr/local/lib/libglib-2.0.a(gregex.o): In function `g_match_info_next':
(.text+0x20e8): undefined reference to `pcre_exec'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `find_display':
(.text+0x3b): undefined reference to `XextFindDisplay'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `find_display':
(.text+0x7e): undefined reference to `XextAddDisplay'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `find_display':
(.text+0x89): undefined reference to `XextCreateExtension'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaQueryScreens':
(.text+0x121): undefined reference to `_XReply'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaQueryScreens':
(.text+0x17b): undefined reference to `_XRead'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaQueryScreens':
(.text+0x1fc): undefined reference to `_XFlush'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaQueryScreens':
(.text+0x242): undefined reference to `_XEatData'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaQueryScreens':
(.text+0x255): undefined reference to `XMissingExtension'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaIsActive':
(.text+0x2f0): undefined reference to `_XReply'
/usr/local/lib/libXinerama.a(Xinerama.o): In function `XineramaIsActive':$ nm /usr/lib/libX11.a | egrep -E "T _XFlush|T _XRead|T _XReply"
00000430 T _XFlushGCCache
00001010 T _XFlush
00000050 T _XRead
00000f10 T _XReadEvents
00000150 T _XReadPad
00000b50 T _XReplyВсе на месте
---------------------------
Чо за НАХ?! Или в 6 утра уже спать пора?! %)
> utilsx11.cpp:(.text+0x928): undefined reference to `XKeysymToKeycode'
> utilsx11.cpp:(.text+0x95c): undefined reference to `XGetModifierMapping'
> utilsx11.cpp:(.text+0x9f4): undefined reference to `XQueryPointer'
> utilsx11.cpp:(.text+0x9fc): undefined reference to `XFreeModifiermap'
> utilsx11.cpp:(.text+0xa42): undefined reference to `XQueryKeymap'...
> Чо за НАХ?! Или в 6 утра уже спать пора?! %)нету libX11 и её друзей
>> utilsx11.cpp:(.text+0x928): undefined reference to `XKeysymToKeycode'
>> utilsx11.cpp:(.text+0x95c): undefined reference to `XGetModifierMapping'
>> utilsx11.cpp:(.text+0x9f4): undefined reference to `XQueryPointer'
>> utilsx11.cpp:(.text+0x9fc): undefined reference to `XFreeModifiermap'
>> utilsx11.cpp:(.text+0xa42): undefined reference to `XQueryKeymap'
> ...
>> Чо за НАХ?! Или в 6 утра уже спать пора?! %)
> нету libX11 и её друзейНу это я уже понял, только они есть. :)
Прокатывает вариант
g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes` -lX11 -lX... -lX...-lX... -lX... -lX... -lX... -lX... -lX... -lfonconfig -lpango -lxcb -lglib
Вот как бы заставить gcc иль какую другую утиль самой
определить эти зависимости и подставить нужный флаг.
> Прокатывает вариант
> g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes` -lX11 -lX... -lX...-lX...
> -lX... -lX... -lX... -lX... -lX... -lfonconfig -lpango -lxcb -lglib
> Вот как бы заставить gcc иль какую другую утиль самой
> определить эти зависимости и подставить нужный флаг.gnu autotools/libtool ?
>> Прокатывает вариант
>> g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes` -lX11 -lX... -lX...-lX...
>> -lX... -lX... -lX... -lX... -lX... -lfonconfig -lpango -lxcb -lglib
>> Вот как бы заставить gcc иль какую другую утиль самой
>> определить эти зависимости и подставить нужный флаг.
> gnu autotools/libtool ?Для хелло ворда!\n :)
>>> Прокатывает вариант
>>> g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes` -lX11 -lX... -lX...-lX...
>>> -lX... -lX... -lX... -lX... -lX... -lfonconfig -lpango -lxcb -lglib
>>> Вот как бы заставить gcc иль какую другую утиль самой
>>> определить эти зависимости и подставить нужный флаг.
>> gnu autotools/libtool ?
> Для хелло ворда!\n :)ну, а как же линкеру догадаться с чем линковать.
если в оригинале шаблона не было, то только самому
>>>> Прокатывает вариант
>>>> g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes` -lX11 -lX... -lX...-lX...
>>>> -lX... -lX... -lX... -lX... -lX... -lfonconfig -lpango -lxcb -lglib
>>>> Вот как бы заставить gcc иль какую другую утиль самой
>>>> определить эти зависимости и подставить нужный флаг.
>>> gnu autotools/libtool ?
>> Для хелло ворда!\n :)
> ну, а как же линкеру догадаться с чем линковать.FOREACH VAR in OUTPUT(g++ hello.cpp)
DO
RES = SEARCH($UNDEF_REF);
IF RES NOT NULL
RETURN FOUND = SEARCH_LIBNAME_WHICH_INLUDE_SYSTEM_SYMBOLS(RES);
DONE
>> ну, а как же линкеру догадаться с чем линковать.
> FOREACH VAR in OUTPUT(g++ hello.cpp)
> DO
> RES = SEARCH($UNDEF_REF);
> IF RES NOT NULL
> RETURN FOUND =
> SEARCH_LIBNAME_WHICH_INLUDE_SYSTEM_SYMBOLS(RES);
> DONE
> Трудно было, пля, придумать такою хню?! :)а если библиотек несколько/разных версий/в разных каталогах/ и т.п.?
>>> ну, а как же линкеру догадаться с чем линковать.
>> FOREACH VAR in OUTPUT(g++ hello.cpp)
>> DO
>> RES = SEARCH($UNDEF_REF);
>> IF RES NOT NULL
>> RETURN FOUND =
>> SEARCH_LIBNAME_WHICH_INLUDE_SYSTEM_SYMBOLS(RES);
>> DONE
>> Трудно было, пля, придумать такою хню?! :)
> а если библиотек несколько/разных версий/в разных каталогах/ и т.п.?Не страдайте фигней, копайте утилиту wx-config --libs --cxxflags --static=yes
она что то не так отрабатывает, все должно подставлсяться автоматически.
> Не страдайте фигней, копайте утилиту wx-config --libs --cxxflags --static=yes
> она что то не так отрабатывает, все должно подставлсяться автоматически.От undefined reference избавился.
Линукется, но вот с такими варнингами...
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_dlunix.o): In function `wxDynamicLibrary::RawLoad(wxString const&, int)':
dlunix.cpp:(.text+0x195): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libgio-2.0.a(glocalfileinfo.o): In function `lookup_gid_name':
(.text+0x206c): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_utilsunx.o): In function `wxGetUserHome(wxString const&)':
utilsunx.cpp:(.text+0x69b): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_utilsunx.o): In function `wxGetUserId(wchar_t*, int)':
utilsunx.cpp:(.text+0x539): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libglib-2.0.a(gutils.o): In function `g_get_any_init_do':
(.text+0x11c4): warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libglib-2.0.a(gutils.o): In function `g_get_any_init_do':
(.text+0x11d9): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libglib-2.0.a(gutils.o): In function `g_get_any_init_do':
(.text+0xedd): warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libgio-2.0.a(glocalfileinfo.o): In function `lookup_uid_data':
(.text+0x1efc): warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libX11.a(xim_trans.o): In function `_XimXTransSocketUNIXConnect':
(.text+0xcda): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libICE.a(icetrans.o): In function `_IceTransGetPeerNetworkId':
(.text+0x1c86): warning: Using 'gethostbyaddr' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libwx_gtk2u-2.8.a(monolib_utilsunx.o): In function `wxGetFullHostName(wchar_t*, int)':
utilsunx.cpp:(.text+0xd41): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/local/lib/libICE.a(icetrans.o): In function `_IceTransSocketINETCreateListener':
(.text+0x187c): warning: Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
Done
В итоге, запускается в Segmentation fault :)
gdb) run
Starting program: /usr/src/gui/gui_sys/gui_main
[Thread debugging using libthread_db enabled]Program received signal SIGSEGV, Segmentation fault.
0x00000000 in ?? ()
(gdb) where
#0 0x00000000 in ?? ()
#1 0xb72e5e48 in _init () from /lib/libpthread.so.0
#2 0x088972fe in call_init ()
#3 0x088974ad in _dl_init ()
#4 0x0888639b in dl_open_worker ()
#5 0x088848ca in _dl_catch_error ()
#6 0x08885c0d in _dl_open ()
#7 0x08848938 in dlopen_doit ()
#8 0x088848ca in _dl_catch_error ()
#9 0x08848be1 in _dlerror_run ()
#10 0x088488a5 in __dlopen ()
#11 0x0860d67f in dlopen ()
#12 0x0855a0a4 in g_module_open ()
#13 0x082e99b2 in load_modules ()
#14 0x082e9e4b in _gtk_modules_init ()
#15 0x082d34b0 in post_parse_hook ()
#16 0x0858c704 in g_option_context_parse ()
#17 0x082d30fc in gtk_parse_args ()
#18 0x082d3168 in gtk_init_check ()
#19 0x0811e6d2 in wxApp::Initialize(int&, wchar_t**) ()
#20 0x080ee90f in wxEntryStart(int&, wchar_t**) ()
#21 0x080eead7 in wxInitialize(int, wchar_t**) ()
#22 0x080eeb2c in wxEntry(int&, wchar_t**) ()
#23 0x0804963b in main (argc=1, argv=0xbffff4e4) at image.cpp:263# strace -ff ./gui_man
...
...
access("/etc/ld.so.nohwcap", F_OK) = 0
open("/usr/lib/libXdmcp.so.6", O_RDONLY) = 5
read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\300\17\0\0004\0\0\0"..., 512) = 512
fstat64(5, {st_mode=S_IFREG|0644, st_size=16972, ...}) = 0
mmap2(NULL, 19804, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 5, 0) = 0xb67ff000
mmap2(0xb6803000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 5, 0x3) = 0xb6803000
close(5) = 0
mprotect(0xb6846000, 4096, PROT_READ) = 0
mprotect(0xb6858000, 4096, PROT_READ) = 0
mprotect(0xb6aa5000, 4096, PROT_READ) = 0
mprotect(0xb6acd000, 4096, PROT_READ) = 0
mprotect(0xb6ad1000, 4096, PROT_READ) = 0
mprotect(0xb6bfe000, 4096, PROT_READ) = 0
set_tid_address(0x8c018c8) = 7836
set_robust_list(0x8c018d0, 0xc) = 0
futex(0xbfc1b944, FUTEX_WAKE_PRIVATE, 1) = 0
futex(0xbfc1b944, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 1, NULL, bfc1b954) = -1 EAGAIN (Resource temporarily unavailable)
rt_sigaction(SIGRTMIN, {0xb6a943b0, [], SA_RESTORER|SA_SIGINFO, 0xb6a9de60}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb6a94840, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0xb6a9de60}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++# ulimit -s крутил всякий разный - не помогает.
>> Не страдайте фигней, копайте утилиту wx-config --libs --cxxflags --static=yes
>> она что то не так отрабатывает, все должно подставлсяться автоматически.
> От undefined reference избавился.
> Линукется, но вот с такими варнингами...
>
> /usr/local/lib/libwx_gtk2u-2.8.a(monolib_dlunix.o): In function `wxDynamicLibrary::RawLoad(wxString
> const&, int)':
> dlunix.cpp:(.text+0x195): warning: Using 'dlopen' in statically linked applications
> requires at runtime the shared libraries from the glibc version used
> for linkingа что собственно выдает ldd для собранной программы? мне кажеться что не смотря на то что это чудо таки собралось некотрых библиотек там таки не хватает. о чем свидетельствуют варнинги и моментальный сегфаулт на попытке вызова getrlimit, ну если быть точным то нету libc
> а что собственно выдает ldd для собранной программы?statically linked
# file ./gui_main
ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), statically linked, not stripped
> мне кажеться что не
> смотря на то что это чудо таки собралось некотрых библиотек там
> таки не хватает. о чем свидетельствуют варнинги и моментальный сегфаулт на
> попытке вызова getrlimit, ну если быть точным то нету libc/usr/lib/libc.a есть, включался -L/usr/lib -lc
Ладно, хрен с ней, забейте. Вернулся на динамику.
> FOREACH VAR in OUTPUT(g++ hello.cpp)
> DO
> RES = SEARCH($UNDEF_REF);
> IF RES NOT NULL
> RETURN FOUND =
> SEARCH_LIBNAME_WHICH_INLUDE_SYSTEM_SYMBOLS(RES);
> DONEТо, что тебе нужно реализовано в pkg-config.
> То, что тебе нужно реализовано в pkg-config.читай ниже, как чудно работает твой pkg-config - http://www.opennet.me/openforum/vsluhforumID9/9159.html#15
>> То, что тебе нужно реализовано в pkg-config.
> читай ниже, как чудно работает твой pkg-config -
> http://www.opennet.me/openforum/vsluhforumID9/9159.html#15pkg-config работает, так как ему сказали согласно Do what I say!
>>> Прокатывает вариант
>>> g++ hworld2.cpp -static `wx-config --libs --cxxflags --static=yes` -lX11 -lX... -lX...-lX...
>>> -lX... -lX... -lX... -lX... -lX... -lfonconfig -lpango -lxcb -lglib
>>> Вот как бы заставить gcc иль какую другую утиль самой
>>> определить эти зависимости и подставить нужный флаг.
>> gnu autotools/libtool ?
> Для хелло ворда!\n :)Для Hello word-а могу порекомендовать mk-configure.
Не колупи себе моск autocrap-ом.Пример ниже.
0 hello_glib2>cat Makefile
PROG = hello_glib2PKG_CONFIG_DEPS = glib-2.0>=2.1
CFLAGS += -DG_DISABLE_DEPRECATED=1
CFLAGS += -DG_DISABLE_SINGLE_INCLUDESMKC_REQD = 0.11.0
.include <mkc.prog.mk>
0 hello_glib2>cat hello_glib2.c
#include <glib.h>
#include <locale.h>
#include <stdio.h>int main (int argc, char** argv)
{
setlocale (LC_ALL, "");puts ("Hello World!");
printf ("glib_major_version=%i\n", (int) glib_major_version);
printf ("glib_minor_version=%i\n", (int) glib_minor_version);
printf ("glib_micro_version=%i\n", (int) glib_micro_version);return 0;
}0 hello_glib2>mkcmake
checking for compiler type... gcc
checking for program cc... /usr/bin/cc
checking for program pkg-config... /usr/pkg/bin/pkg-config
checking for [pkg-config] glib-2.0 >= 2.1... 1 (yes)
checking for [pkg-config] glib-2.0 >= 2.1 --cflags... -I/usr/pkg/include/glib/glib-2.0 -I/usr/pkg/lib/glib-2.0/include
checking for [pkg-config] glib-2.0 >= 2.1 --libs... -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lglib-2.0 -lintl
cc -DG_DISABLE_DEPRECATED=1 -DG_DISABLE_SINGLE_INCLUDES -I/usr/pkg/include -I/usr/pkg/include/glib/glib-2.0 -I/usr/pkg/lib/glib-2.0/include -c hello_glib2.c
cc -L/usr/pkg/lib -o hello_glib2 hello_glib2.o -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -lglib-2.0 -lintl0 hello_glib2>./hello_glib2
Hello World!
glib_major_version=2
glib_minor_version=28
glib_micro_version=60 hello_glib2>
> Для Hello word-а могу порекомендовать mk-configure.
> Не колупи себе моск autocrap-ом.
> Для Hello word-а могуwxWidgetGTK + SDL
Debian_овская версия wxWidget не имеет статических библиотек.
SDL зависит от libpulse-simple, которой статической вообще не существует.
glib-2.0 тянет за собой libgio-2.0, к которой есть символы "is_selinux"
что ясно дело зависит от libselinux, но в профиле pkg-config она не указана.glib тянет за собой libpango, у котоорй есть символы ln_thai, через некоторое
время узнал, что они живут в libthai, о зависимости которой тоже них...я
не указано в /usr/lib/pkgconfig/pango.pc
>> Для Hello word-а могу
> wxWidgetGTK + SDL
> Debian_овская версия wxWidget не имеет статических библиотек.А зачем? Если действительно нужно, пиши в спортлото.
> SDL зависит от libpulse-simple, которой статической вообще не существует.
Вопрос тот же. Тафига тебе статика?
> glib-2.0 тянет за собой libgio-2.0, к которой есть символы "is_selinux"
> что ясно дело зависит от libselinux, но в профиле pkg-config она не указана.-lselinux можно и руками добавить.
> glib тянет за собой libpango, у котоорй есть символы ln_thai, через некоторое
> время узнал, что они живут в libthai, о зависимости которой тоже
> них...я
> не указано в /usr/lib/pkgconfig/pango.pcПиши в спортлото. С этим надо не по форумам лазить, а пакетировщикам
и/или апстриму писать.
> Пиши в спортлото. С этим надо не по форумам лазить, а пакетировщикам
> и/или апстриму писать.Да мне вообще на форумы нельзя, если я спрашиваю, ответа не знает никто,
вот сижу как лох, даже поговорить не с кем :)
>> Пиши в спортлото. С этим надо не по форумам лазить, а пакетировщикам
>> и/или апстриму писать.
> Да мне вообще на форумы нельзя, если я спрашиваю, ответа не знает
> никто, вот сижу как лох, даже поговорить не с кем :)Не льсти себе ;-)
В данном конкретном случае толкаться на форумах -- просто потеря времени.
Нужны статические библиотеки в пакетах (зачем бы???), которых там нет,
писать надо прямо по адресу, не теряя времени. Ну причем тут форум?