crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
Zueuk
  опции профиля:
сообщение 10.5.2010, 22:03
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Опытные товарищи, есть вопросы.
Использую в Linux (Fedora 11) кросс-компилятор mingw32. А конкретнее, версию для arm (arm-mingw32).
При компилировании примера (код примера под спойлером ниже), выдаёт ошибки:
Цитата
/opt/mingw32ce/bin/arm-mingw32ce-g++ -fno-exceptions -o test_wince.exe test.cpp
/tmp/ccdgZQsW.o:test.cpp:(.text+0x58): undefined reference to `CommandBar_Create'
/tmp/ccdgZQsW.o:test.cpp:(.text+0x70): undefined reference to `CommandBar_AddAdornments'
/tmp/ccdgZQsW.o:test.cpp:(.text+0xa0): undefined reference to `CommandBar_Height'
collect2: ld returned 1 exit status
make: *** [wince] Ошибка 1

Более подробный вывод ошибок.
Раскрывающийся текст

make wince
/opt/mingw32ce/bin/arm-mingw32ce-g++ -fno-exceptions -v -o test_wince.exe test.cpp 
Using built-in specs.
Target: arm-mingw32ce
Configured with: /usr/src/rpm/BUILD/cegcc-mingw32ce-0.55/src/gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --target=arm-mingw32ce --prefix=/opt/mingw32ce --enable-threads=win32 --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-multilib --disable-interwork --without-newlib --enable-checking --with-headers
Thread model: win32
gcc version 4.1.0
 /opt/mingw32ce/libexec/gcc/arm-mingw32ce/4.1.0/cc1plus -quiet -v -D__COREDLL__ -D__MINGW32__ -D__MINGW32CE__ -D__CEGCC_VERSION__ -idirafter ../include/w32api -idirafter ../../include/w32api test.cpp -quiet -dumpbase test.cpp -auxbase test -version -fno-exceptions -o /tmp/ccOgODGH.s
ignoring nonexistent directory "/opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/sys-include"
ignoring nonexistent directory "../include/w32api"
ignoring nonexistent directory "../../include/w32api"
#include "..." search starts here:
#include <...> search starts here:
 /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../include/c++/4.1.0
 /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../include/c++/4.1.0/arm-mingw32ce
 /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../include/c++/4.1.0/backward
 /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/include
 /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/include
End of search list.
GNU C++ version 4.1.0 (arm-mingw32ce)
        compiled by GNU C version 4.3.2.
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
Compiler executable checksum: 1ccab0ce77fd000b9b5f232ad151db14
 /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/bin/as -o /tmp/ccFSX8cJ.o /tmp/ccOgODGH.s
 /opt/mingw32ce/libexec/gcc/arm-mingw32ce/4.1.0/collect2 -Bdynamic -o test_wince.exe /opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/lib/crt3.o -L/opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0 -L/opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/lib /tmp/ccFSX8cJ.o -lstdc++ -lmingw32 -lgcc -lceoldname -lmingwex -lcoredll -lcoredll -lmingw32 -lgcc -lceoldname -lmingwex -lcoredll
/tmp/ccFSX8cJ.o:test.cpp:(.text+0x58): undefined reference to `CommandBar_Create'
/tmp/ccFSX8cJ.o:test.cpp:(.text+0x70): undefined reference to `CommandBar_AddAdornments'
/tmp/ccFSX8cJ.o:test.cpp:(.text+0xa0): undefined reference to `CommandBar_Height'
collect2: ld returned 1 exit status


Пример кода, который пробуется:
Раскрывающийся текст

/============================================================
// TinyCE - Небольшая программа для Windows CE
//
#include <windows.h>
#include <commctrl.h>             // подключение линейки команд
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM,LPARAM);
TCHAR szAppName[] = TEXT ("TinyCE");
HINSTANCE hInst;
//-----------------------------------
// Точка входа в программу
//
int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance, LPWSTR lpCmdLine,
                    int nCmdShow) {
  WNDCLASS wc;
  HWND hWnd;
  MSG msg;
  hInst = hInstance;
  // Регистрируется класс App Main Window
  memset (&wc, 0, sizeof (wc));
  wc.lpfnWndProc = MainWndProc;         // Внешний вызов
  wc.hInstance = hInstance;             // Дескриптор владельца
  wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
  wc.lpszClassName = szAppName;         // Имя класса окна
  if (RegisterClass(&wc) == 0) return -1;
  // Построение главного окна
  hWnd = CreateWindow (szAppName,       // Класс окна
                       szAppName,       // Заголовок окна
                       WS_VISIBLE,      // Флаги стилей
                       CW_USEDEFAULT,   // Позиция по X
                       CW_USEDEFAULT,   // Позиция по Y
                       CW_USEDEFAULT,   // Исходная ширина
                       CW_USEDEFAULT,   // Исходная высота
                       NULL,            // Предок
                       NULL,            // Меню, должен иметь
                                        // значение NULL
                       hInstance,       // Экземпляр программы
                       NULL);           // Указатель для
                                        // создания параметров
  // В качестве return-значения передается код ошибки,
  // если окно не построено
  if (!IsWindow (hWnd)) return -2;
  // Стандартные вызовы отображения и обновления
  ShowWindow (hWnd, nCmdShow);
  UpdateWindow (hWnd);
  // Цикл обработки сообщений в программе
  while (GetMessage (&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return 0;
}
//-----------------------------------
// Основная оконная процедура
//
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT wMsg,
                             WPARAM wParam, LPARAM lParam) {
  HWND hwndCB;
    PAINTSTRUCT ps;
    RECT rect;
    HDC hdc;
  switch (wMsg) {
  case WM_CREATE:
    // Создание минимальной панели команд, содержащей только
    // кнопку Exit.
    hwndCB = CommandBar_Create (hInst, hWnd, 0x10);
    CommandBar_AddAdornments (hwndCB, 0, 0);
    break;
  case WM_PAINT:
    // Настройка размера прямоугольника клиентского окна
    // с учетом высоты панели команд.
      GetClientRect (hWnd, &rect);
    rect.top += CommandBar_Height (GetDlgItem (hWnd, 0x10));
      hdc = BeginPaint (hWnd, &ps);
    DrawText (hdc, TEXT ("Hello Windows CE!"), -1, &rect,
                DT_CENTER | DT_VCENTER | DT_SINGLELINE);
      EndPaint (hWnd, &ps);
    break;
  case WM_DESTROY:
    break;
  }
  return DefWindowProc(hWnd, wMsg, wParam, lParam);
}


Все заголовочные файлы есть и лежат, где нужно. Что за ошибка и как исправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 10.5.2010, 23:08
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Zueuk @ 10.5.2010, 23:03) Link
undefined reference to `CommandBar_Create'
говорит о том, что компилятор не видит хидер в котором реализован CommandBar_Create.
И обрати внимание на:
Цитата
ignoring nonexistent directory "/opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/sys-include"
ignoring nonexistent directory "../include/w32api"
ignoring nonexistent directory "../../include/w32api"
Как я понимаю Commctrl.h должен быть в одной из тех директорий!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 11.5.2010, 8:23
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Хедеры не при чём.
Это ошибки линкера. Он не нашел указанных символов. Судя по названиям они должны лежать в библиотеке comctl32 так что добавь в командную строку -lcomctl32
Скорее всего ещё какие-то либы понадобятся. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_Zueuk_*_*
сообщение 11.5.2010, 14:22
Сообщение #4





Гости








    


Цитата(ViGOur @ 10.5.2010, 23:08) Link
Как я понимаю Commctrl.h должен быть в одной из тех директорий!

Спасиалньо проверил - есть такое.

Цитата(Tonal @ 11.5.2010, 8:23) Link
Это ошибки линкера. Он не нашел указанных символов. Судя по названиям они должны лежать в библиотеке comctl32 так что добавь в командную строку -lcomctl32

Вот это попробую.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 11.5.2010, 14:25
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Гость_Zueuk_* @ 11.5.2010, 14:22) Link
Цитата(ViGOur @ 10.5.2010, 23:08) Link
Как я понимаю Commctrl.h должен быть в одной из тех директорий!

Спасиалньо проверил - есть такое.

Цитата(Tonal @ 11.5.2010, 8:23) Link
Это ошибки линкера. Он не нашел указанных символов. Судя по названиям они должны лежать в библиотеке comctl32 так что добавь в командную строку -lcomctl32

Вот это попробую.

Забыл залогиниться.

PS "Спасиалньо" читать, как "специально".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 11.5.2010, 19:26
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Tonal @ 11.5.2010, 8:23) Link
Хедеры не при чём.
Это ошибки линкера. Он не нашел указанных символов. Судя по названиям они должны лежать в библиотеке comctl32 так что добавь в командную строку -lcomctl32
Скорее всего ещё какие-то либы понадобятся. :)

А верно ли, что прописать -lcomctl32? Посмотрел - такого заголовочного файла нет. И компилятор выдаёт об этом ошибку:
Цитата
make wince
/opt/mingw32ce/bin/arm-mingw32ce-g++ -fno-exceptions -lcomctl32 -o test_wince.exe test.cpp
/opt/mingw32ce/lib/gcc/arm-mingw32ce/4.1.0/../../../../arm-mingw32ce/bin/ld: cannot find -lcomctl32
collect2: ld returned 1 exit status

Попробовал -lcommctrl, но ошибка все та же, что выше.
Приведу свой make-файл. Может в нём ошибся.
Раскрывающийся текст

$ cat Makefile
TARGET=  test

CC_WINCE= /opt/mingw32ce/bin/arm-mingw32ce-g++

LIB_WINCE= -I/opt/mingw32ce/arm-mingw32ce/include
#CFLAGS_WINCE= -fno-exceptions -finput-charset="cp1251"
CFLAGS_WINCE= -fno-exceptions -lcommctrl

wince:
# Compiling for wince
        $(CC_WINCE) $(CFLAGS_WINCE) -o $(TARGET)_wince.exe $(TARGET).cpp 
        ##$(LIB_WINCE) 
        /opt/mingw32ce/bin/arm-mingw32ce-strip $(TARGET)_wince.exe

clean:
        rm -f $(TARGET)_wince.exe


Вот содержимое папки include:
Раскрывающийся текст

ls -pxCF /opt/mingw32ce/arm-mingw32ce/include

accctrl.h   dvdevcod.h    lmchdev.h   ntldap.h    rpcnsip.h      usp10.h
aclapi.h    dvdmedia.h    lmconfig.h  ntsecapi.h    rpcnterr.h     utime.h
aclui.h     edevdefs.h    lmcons.h    ntsecpkg.h    rpcproxy.h     uxtheme.h
adsprop.h   errno.h    lmerr.h     oaidl.h    rtutils.h      values.h
af_irda.h   errorrep.h    lmerrlog.h  objbase.h    schannel.h     varargs.h
afxres.h    errors.h    lm.h        objfwd.h    schnlsp.h      vfw.h
altcecrt.h  evcode.h    lmmsg.h     objidl.h    scrnsave.h     vidcap.h
amaudio.h   excpt.h    lmremutl.h  objsafe.h    sddl.h           vmr9.h
amvideo.h   exdisp.h    lmrepl.h    objsel.h    sdl/           vptype.h
assert.h    exdispid.h    lmserver.h  ocidl.h    search.h       w32api.h
audevcod.h  fcntl.h    lmshare.h   odbcinst.h    secext.h       wchar.h
aviriff.h   fenv.h    lmsname.h   ole2.h    security.h     wctype.h
aygshell.h  float.h    lmstats.h   ole2ver.h    service.h      winable.h
basetsd.h   fltdefs.h    lmsvc.h     oleacc.h    servprov.h     winbase.h
basetyps.h  getopt.h    lmuseflg.h  oleauto.h    setjmp.h       winber.h
bdatypes.h  GL/        lmuse.h     olectl.h    setupapi.h     wincon.h
cderr.h     httpext.h    lmwksta.h   olectlid.h    share.h        wincrypt.h
ceconfig.h  icm.h    locale.h    oledlg.h    shellapi.h     windef.h
cegcc.h     icmpapi.h    lzexpand.h  ole.h    shldisp.h      windns.h
cguid.h     idispids.h    malloc.h    oleidl.h    shlguid.h      windows.h
cmnquery.h  il21dec.h    mapi.h        pbt.h    shlobj.h       windowsx.h
comcat.h    imagehlp.h    math.h        pm.h    shlwapi.h      winerror.h
commctrl.h  imm.h    mbctype.h   poppack.h    signal.h       wingdi.h
commdlg.h   initguid.h    mbstring.h  powrprof.h    sipapi.h       wininet.h
complex.h   intshcut.h    mciavi.h    process.h    snmp.h           winioctl.h
conio.h     inttypes.h    mcx.h        projects.h    specstrings.h  winldap.h
control.h   io.h    mem.h        prsht.h    sqlext.h       winnetwk.h
cplext.h    ipexport.h    memory.h    psapi.h    sql.h           winnls.h
cpl.h        iphlpapi.h    mgm.h        pshpack1.h    sqltypes.h     winnt.h
ctype.h     ipifcons.h    mgmtapi.h   pshpack2.h    sqlucode.h     winperf.h
custcntl.h  ipinfoid.h    _mingw.h    pshpack4.h    sspi.h           winreg.h
dbt.h        iprtrmib.h    mlang.h     pshpack8.h    stdint.h       winresrc.h
dde.h        iptypes.h    mmreg.h     qedit.h    stdio.h        winsnmp.h
ddeml.h     ipxconst.h    mmsystem.h  rapi.h    stdlib.h       winsock2.h
devguid.h   ipxrtdef.h    mpegtype.h  rasdlg.h    stm.h           winsock.h
devload.h   ipxtfflt.h    mprapi.h    raserror.h    string.h       winspool.h
dhcpcsdk.h  isguids.h    mq.h        ras.h    strings.h      winsvc.h
direct.h    kfuncs.h    msacm.h     rassapi.h    strmif.h       winuser.h
dirent.h    ks.h    msgqueue.h  reason.h    subauth.h      winver.h
dir.h        ksmedia.h    mshtml.h    regstr.h    svcguid.h      ws2spi.h
dlgs.h        largeint.h    mswsock.h   richedit.h    sys/           ws2tcpip.h
docobj.h    libgen.h    nb30.h        richole.h    tchar.h        wsahelp.h
dos.h        limits.h    nddeapi.h   routprot.h    time.h           wsipx.h
dsadmin.h   lmaccess.h    notify.h    rpcdce2.h    tlhelp32.h     wsnetbs.h
dsclient.h  lmalert.h    nspapi.h    rpcdce.h    tmschema.h     wtsapi32.h
dsgetdc.h   lmapibuf.h    ntdef.h     rpcdcep.h    todaycmn.h     wtypes.h
dshow.h     lmat.h    ntdll.h     rpc.h    unistd.h       xprtdefs.h
dsquery.h   lmaudit.h    ntdsapi.h   rpcndr.h    unknwn.h       zmouse.h
dsrole.h    lmbrowsr.h    ntdsbcli.h  rpcnsi.h    userenv.h

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 12.5.2010, 14:53
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Zueuk @ 11.5.2010, 20:26) Link
А верно ли, что прописать -lcomctl32? Посмотрел - такого заголовочного файла нет. И компилятор выдаёт об этом ошибку:
-lcommctrl - это библиотечка commctrl.lib, глянь где она у тебя лежит...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 12.5.2010, 19:26
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ViGOur @ 12.5.2010, 14:53) Link
-lcommctrl - это библиотечка commctrl.lib, глянь где она у тебя лежит...

Забавно, из библиотек только SDL.lib в двух местах (копировал вручную, пробовал пример работы с SDL).
Получается, надо брать исходники и компилировать целиком и с библиотеками? А как тогда компилируются простые исходников? Им же не нужны для этого бибилиотеки, а принцип такой же, что и для чуть усложненных исходников? Ведь, в заголовочных файлах описаны прототипы функций, константы и прочее.
Подозреваю, что мои вопросы очень просты для опытных людей. Если подскажете, где прочитать, почитаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 13.5.2010, 11:01
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


В Гугле не забанен, конечно. А краткое наведение на путь очень помогло бы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SandySandy
  опции профиля:
сообщение 14.5.2010, 3:51
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 14.5.2010
Пользователь №: 1714

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Zueuk @ 10.5.2010, 23:03) Link
Использую в Linux (Fedora 11) кросс-компилятор mingw32. А конкретнее, версию для arm (arm-mingw32).

это не mingw32ce?
что то я быстрым поиском по google + arm-mingw32 + fedora не нашел ничего
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 14.5.2010, 20:13
Сообщение #11


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(SandySandy @ 14.5.2010, 3:51) Link
Цитата(Zueuk @ 10.5.2010, 23:03) Link
Использую в Linux (Fedora 11) кросс-компилятор mingw32. А конкретнее, версию для arm (arm-mingw32).

это не mingw32ce?
что то я быстрым поиском по google + arm-mingw32 + fedora не нашел ничего

Оно самое. Сам такое искал, конкретного ничего нет, поэтому скачал уже собранное. Похоже, придется качать исходники и все вручную компилировать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 20.5.2010, 7:54
Сообщение #12


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Библиотека libcomctl32.a входит в состав пакета w32api - это для обычной вынь32-шной мингвы.
Для WinCE-ARM нужно искать аналогичный пакет.
Хотя если хедеры присутствуют, то и либки должны.
Похоже на какой-то бардак в путях поиска линкера...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 25.5.2010, 9:14
Сообщение #13


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Tonal @ 20.5.2010, 7:54) Link
Библиотека libcomctl32.a входит в состав пакета w32api - это для обычной вынь32-шной мингвы.
Для WinCE-ARM нужно искать аналогичный пакет.
Хотя если хедеры присутствуют, то и либки должны.
Похоже на какой-то бардак в путях поиска линкера...

Спасибо за ответ. Буду разбираться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SandySandy
  опции профиля:
сообщение 30.5.2010, 16:28
Сообщение #14


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 14.5.2010
Пользователь №: 1714

Спасибо сказали: 0 раз(а)




Репутация:   0  


grep CommandBar_Create /opt/mingw32ce/arm-mingw32ce/lib/*
Бинарный файл /opt/mingw32ce/arm-mingw32ce/lib/libcommctrl.a совпадает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 12.6.2010, 14:40
Сообщение #15


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(SandySandy @ 30.5.2010, 16:28) Link
grep CommandBar_Create /opt/mingw32ce/arm-mingw32ce/lib/*
Бинарный файл /opt/mingw32ce/arm-mingw32ce/lib/libcommctrl.a совпадает
Не понял Вашу фразу.

А по своему вопросу - вроде разобрался.
1. Скачал и собрал cegcc.
2. Не правильно указывал опции для компилятора. -lcommctrl нужно было ставить в опции библиотек. А ставил к флагам. Приложил исправленный Makefile.
Раскрывающийся текст

Цитата
TARGET= test

CC_WINCE= /opt/mingw32ce/bin/arm-mingw32ce-g++
LIB_WINCE= -I/opt/mingw32ce/arm-mingw32ce/include -L/opt/mingw32ce/arm-mingw32ce/lib -lcommctrl
#CFLAGS_WINCE= -fno-exceptions -finput-charset="cp1251"
CFLAGS_WINCE= -fno-exceptions

wince:
# Compiling for wince
$(CC_WINCE) $(CFLAGS_WINCE) -o $(TARGET)_wince.exe $(TARGET).cpp $(LIB_WINCE)
/opt/mingw32ce/bin/arm-mingw32ce-strip $(TARGET)_wince.exe

clean:
rm -f $(TARGET)_linux $(TARGET)_win32.exe $(TARGET)_wince.exe

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 24.6.2010, 21:03
Сообщение #16


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Продолжу задавать глупые вопросы.
Взял простой пример для того, чтобы скомпилировать. Компилировать и мне выдаётся ошибка:
Раскрывающийся текст

Цитата
make wince
/opt/mingw32ce/bin/arm-mingw32ce-g++ -fno-exceptions -o trayapp_wince.exe trayapp.cpp -I/opt/mingw32ce/arm-mingw32ce/include -L/opt/mingw32ce/arm-mingw32ce/lib -lcommctrl -laygshell -lceshell
/tmp/ccYBKpQW.o:trayapp.cpp:(.text+0x68): undefined reference to `Shell_NotifyIconW'
collect2: ld returned 1 exit status
make: *** [wince] Ошибка 1

Т.е. не находит определение функции. Хорошо. Перехожу в папку с заголовочными файлами и ищу определение этой функции:
Цитата
grep Shell_NotifyIconW *
shellapi.h:BOOL WINAPI Shell_NotifyIconW(DWORD,PNOTIFYICONDATAW);
shellapi.h:#define Shell_NotifyIcon Shell_NotifyIconW
Получается, что определение есть.
Вопрос: почему компилятор игнорирует заголовочный файл с определением функции и ругается?

PS Прилагаю исходники примера, которые пытаюсь скомпилировать. Исходник взял достаточно простой, без специальных заточек для MSVC.
Прикрепленные файлы
Прикрепленный файл  trayapp_wince.zip ( 5.06 килобайт ) Кол-во скачиваний: 131
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.6.2010, 21:26
Сообщение #17


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


т.к. ругается линкер, то смотреть надо не заголовочный файл, линкер на него не смотрит, он смотрит a-файл. видимо в нём, что-то не сходится с заголовочником.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 24.6.2010, 22:19
Сообщение #18


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Пальцем в небо: а если студийный #include "stdafx.h" закоментить ? Или Qt прекомпиляцию тоже поддерживает ? (сомневаюсь)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 25.6.2010, 11:30
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Litkevich Yuriy @ 24.6.2010, 21:26) Link
т.к. ругается линкер, то смотреть надо не заголовочный файл, линкер на него не смотрит, он смотрит a-файл. видимо в нём, что-то не сходится с заголовочником.
А возможно это как-то проверить? Даже и не думал, что такое возможно.

Цитата(Алексей1153 @ 24.6.2010, 22:19) Link
Пальцем в небо: а если студийный #include "stdafx.h" закоментить ? Или Qt прекомпиляцию тоже поддерживает ?
Зачем? В stdafx.h лишнего почти ничего нет. Так что он не мешает.
А вопрос про Qt не понял, так как о нем речи не было.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 25.6.2010, 11:36
Сообщение #20


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Zueuk @ 25.6.2010, 14:30) Link
А вопрос про Qt не понял, так как о нем речи не было.

Это я тормознул )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 26.6.2010, 22:57
Сообщение #21


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Продолжаю свои изыскания.
Нашел, как просмотреть библиотеки на наличие функций. Делается это с помощью команды strings.
Раскрывающийся текст

Цитата
[zueuk@zueuk lib]$ /opt/mingw32ce/bin/arm-mingw32ce-strings -f /opt/mingw32ce/arm-mingw32ce/lib/lib*.a |grep Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll6.a: Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll6.a: __imp_Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll6.a: Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll6.a: Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll6.a: __imp_Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll.a: Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll.a: __imp_Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll.a: Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll.a: Shell_NotifyIcon
/opt/mingw32ce/arm-mingw32ce/lib/libcoredll.a: __imp_Shell_NotifyIcon

А в ошибке пишется название как Shell_NotifyIconW. Имеет ли это значение? Ведь заголовочных файлах идет переопределение функции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 27.6.2010, 0:03
Сообщение #22


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


проверить не могу, но есть у меня мысля, что не указаны у тебя какие-то макросы для CE
например, в сети есть такие куски кода:
#ifdef _WIN32_WCE               // these are PPC only
    extern (Windows) {
        HWND  CommandBar_Create(HINSTANCE, HWND, int);
         BOOL  CommandBar_Show(HWND, BOOL);
        int   CommandBar_AddBitmap(HWND, HINSTANCE, int, int, int, int);
        HWND  CommandBar_InsertComboBox(HWND, HINSTANCE, int, UINT, WORD, WORD);
        BOOL  CommandBar_InsertMenuba
....

(это из кода порта commctl)
попробуй вот это самое _WIN32_WCE твоему компилеру указать. вдруг сожрёт.

Сообщение отредактировал Iron Bug - 27.6.2010, 0:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 27.6.2010, 11:12
Сообщение #23


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Указал компилятору эту опцию как -D_WIN32_WCE=0x400. Дополнительно еще указал -D_WIN32_IE=0x400. Ошибка все равно осталась.
Кстати, функция находится в двух библиотеках: libcoredll.a, libcoredll6.a . Указывал обе (как -lcoredll и -lcoredll6, вместе и отдельно), но ошибка осталась. Видимо, придется как-то патчить библиотеки.

Переборщил с тэгом жирности.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 28.6.2010, 19:08
Сообщение #24


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Посмотрел исходники. На сколько понял, все указано нормально и корректно. Подскажите, что еще можно попробовать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.6.2010, 19:24
Сообщение #25


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Судя по Link,

Требования
Microsoft Windows CE 5.0 или более поздние версии.
Файл заголовка: объявлен в файле Afxext.h.

Порыскай в windows.h и commctrl.h - а там сообще есть такой инклуд? Или просто заинклудь его после windows.h

а ещё так, может
#define  _WIN32_WCE 0x500
#define _WIN32_IE 0x0600
#include <windows.h>
//#include <Afxext.h> //кстати, MFC-шный хидер
#include <commctrl.h>


Сообщение отредактировал Алексей1153 - 28.6.2010, 19:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 28.6.2010, 21:54
Сообщение #26


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Алексей1153,
Ты невнимательно прочитал последние сообщения.
CommandBar меня не интересует. Меня интересует функция Shell_NotifyIcon. В исходнике (архив выкладывал) она используется. В заголовочных файлах и в библиотеках эта функция есть. Так как в WinCE используется Unicode, то ссылается в ошибках на функцию Shell_NotifyIconW. Указываю различные опции для компилятора, но ошибка остаётся. Как уже опоминули, это выдаёт линкер и смысл такой, что не находит эту функцию в библиотеке. Хотя она там есть (выше проверял это).
Например, вот очередной вывод с твоими вариантами -D_WIN32_WCE=0x500 и -D_WIN32_IE=0x600:
Раскрывающийся текст

Цитата
make wince
/opt/mingw32ce/bin/arm-mingw32ce-g++ -D_WIN32_WCE=0x600 -D_WIN32_IE=0x600 -fno-exceptions -o trayapp_wince.exe trayapp.cpp -I/opt/mingw32ce/arm-mingw32ce/include -L/opt/mingw32ce/arm-mingw32ce/lib -lcommctrl -laygshell -lcoredll
/tmp/ccXwdO3j.o:trayapp.cpp:(.text+0x70): undefined reference to `Shell_NotifyIconW'
collect2: ld returned 1 exit status
make: *** [wince] Ошибка 1

Уже и не знаю, что почитать и где искать?!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 29.6.2010, 6:13
Сообщение #27


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Zueuk, я как предположение говорю, точно сказать не могу (

Насчёт
Цитата(Zueuk @ 29.6.2010, 0:54) Link
вариантами -D_WIN32_WCE=0x500 и -D_WIN32_IE=0x600:

я предлагал не так , а определить дефайны перед инклудами. Предполагаю по аналогии с одним случаем: искал как-то для трея, как показать сообщение не в прямоугольнике, а в виде облака. И оказалось, что студия по умолчанию делает константы WINVER и _WIN32_WINNT == 0x400, а где-то в пучинах MS-кода этот дефайн с таким значением не открывал доступ к облаку. В итоге, в класса для работы с треем у меня красуется напоминалка
        //!!!ОБРАТИТЕ ВНИМАНИЕ НА СЛЕДУЮЩИЙ МОМЕНТ!!! (иначе не покажется balloon при вызове ShowBalloon())
        //в VS6 :
        //        константу WINVER сделать не ниже 0x500 (например, если она изначально задана 0x400 ,
        //        написать 0x500 или 0x501.)
        //
        //в VS9 (2008) :
        //        константы лежат в файле targetver.h в папке проекта. Задать константы WINVER
        //        и _WIN32_WINNT равными 0x0500 (значение 0x600 не работает!)
        //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Ну и не сочти за рекламу, зайди на сайт из моего профиля - там задай вопрос
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 29.6.2010, 8:59
Сообщение #28


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 29.6.2010, 6:13) Link
а определить дефайны перед инклудами
И так пробовал, а компилятор ругался - говорит, уже было ранее определение. Возможно, я не верно указывал.
Указал вот так:
#define WINVER 0x500
#define _WIN32_WINNT 0x500
Ошибка осталась.

Цитата(Алексей1153 @ 29.6.2010, 6:13) Link
зайди на сайт из моего профиля
Этот сайт знаю, спасибо, напомнил. Как-то помог он мне.
Посмотрел - не нашел ни одной темы, чтобы использовали cegcc. Если бы кто использовал, можно было быстрее найти ошибку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 29.6.2010, 9:08
Сообщение #29


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(Zueuk @ 29.6.2010, 11:59) Link
а компилятор ругался - говорит, уже было ранее определение. Возможно, я не верно указывал


а ругался на введённый тобой дефайн или внутри стандартных инклудов ? А то разопредели
#undef WINVER 
#define WINVER 0x500

#undef _WIN32_WINNT
#define _WIN32_WINNT 0x500


Цитата(Zueuk @ 29.6.2010, 11:59) Link
Посмотрел - не нашел ни одной темы, чтобы использовали cegcc.

Да, я тоже не припомню. Но ничто не мешает создать новую тему
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 29.6.2010, 11:49
Сообщение #30


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 29.6.2010, 9:08) Link
А то разопредели

Попробовал оба варианта, с определением и с распределением. Ошибка осталась.

Уже на принцип пойду, чтоб разобраться. Ведь какая-то глупая ошибка, из-за которой дальше не могу продвинуться. И никто не гарантирует, что в дальнейшем такое не повториться. И тогда поможет опыт решения похожей ошибки.
Цитата(Алексей1153 @ 29.6.2010, 9:08) Link
Но ничто не мешает создать новую тему
Согласен.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 29.6.2010, 12:32
Сообщение #31


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Zueuk, может, всё решается скачиванием какого-нибудь обновления ? ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 29.6.2010, 12:43
Сообщение #32


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Алексей1153, компилятор собирал из исходников, которые скачал через svn. Проверял, свежих обновлений не было.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 2.7.2010, 20:56
Сообщение #33


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спросил еще на другом форуме. Там дали такую подсказку:
Цитата
почитать про name mangling (я об этом внезапно вспомнил, когда не собралось с g++ и собралось с gcc) и обернуть декларацию функции в блок extern "C" {}

Сделал следующее:
#undef Shell_NotifyIcon
extern "C" {
BOOL WINAPI Shell_NotifyIcon(unsigned long, PNOTIFYICONDATAW);
};

Ошибка пропала и приложение собирается. Но не запускается. И не пишет при этом никаких ошибок.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.7.2010, 7:24
Сообщение #34


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


А GetLastErr() что возвращает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 3.7.2010, 19:08
Сообщение #35


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Алексей1153, приведи пример, как ее можно использовать. Почитал, но что-то не понял про нее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 3.7.2010, 19:13
Сообщение #36


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Опечатался немного

GetLastError()

Когда вызываешь апишную функцию, если всё ок, то GetLastError() после возврата из функции возвращает 0. Иначе - системный код ошибки. По коду иногда становится понятно, куда копать дальше
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 4.7.2010, 17:02
Сообщение #37


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Запутался с этими всеми w* .
Пробую вот такую конструкцию для получения кода ошибки (цель - получить код ошибки и вывести его через сообщение):
//проверка на ошибку
    int iLastError = GetLastError();
    const WCHAR* wLastError;
    swprintf(wLastError, "%s", iLastError);
    
    if (iLastError > 0)
    {
    MessageBox(NULL, wLastError, NULL, 0);
    }

Компилятор выдаёт ошибки:
Цитата
trayapp.cpp: In function 'int WinMain(HINSTANCE__*, HINSTANCE__*, WCHAR*, int)':
trayapp.cpp:124: error: invalid conversion from 'const WCHAR*' to 'wchar_t*'
trayapp.cpp:124: error: cannot convert 'const char*' to 'const wchar_t*' for argument '2' to 'int swprintf(wchar_t*, const wchar_t*, ...)'

Не понимаю, откуда он взял 'const char*'? И правильный ход мысли?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 4.7.2010, 17:58
Сообщение #38


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Zueuk, что творишь :)

const WCHAR* wLastError;// 1) не инициализировал, 2) не выделил память
swprintf(wLastError, "%s", iLastError);//и шлёпаешь туда строку.


Вылетело бы со свистом!

Потом,
WCHAR wLastError[20];//ты сюда, вроде, собрался записывать. Длину я взял от балды
memset(wLastError,0,sizeof(wLastError));//инитка


а тут попробуй так
swprintf(
   (wchar_t*)wLastError, 
    _T("%s"), 
   iLastError);


Сообщение отредактировал Алексей1153 - 4.7.2010, 18:00
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Zueuk
  опции профиля:
сообщение 4.7.2010, 20:37
Сообщение #39


Студент
*

Группа: Участник
Сообщений: 21
Регистрация: 10.5.2010
Пользователь №: 1702

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(Алексей1153 @ 4.7.2010, 17:58) Link
что творишь :)
В этом пока мало силён. Буду по ходу разбираться.

Сделал по твоему образцу.
    int iLastError = GetLastError();
    WCHAR wLastError[100];
    memset(wLastError, 0, sizeof(wLastError));
    swprintf( (wchar_t*) wLastError, L"%s", iLastError);
    
    MessageBox(NULL, wLastError, NULL, 0);

Кстати, что за конструкция?
(wchar_t*) wLastError

PS И буду признателен, если подскажешь, где про это можно почитать. Сколько гуглил - ничего толкового не видел для чтения.
Сам нашел довольно толковое Link.

Сообщение отредактировал Zueuk - 4.7.2010, 23:28
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.7.2010, 22:50
Сообщение #40


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Zueuk @ 5.7.2010, 0:37) Link
Кстати, что за конструкция?
приведение типа в Си стиле
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.8.2025, 6:13