forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Android (http://forum.boolean.name/forumdisplay.php?f=150)
-   -   Проблемы с нативным код (http://forum.boolean.name/showthread.php?t=17202)

Жека 20.08.2012 11:10

Проблемы с нативным код
 
Вложений: 1
Помогите разобраться.
Странная штука - Eclipse (juno) не может заинклудить файл limits.h, если он указан в виде #include <limits>, как это сделано в движке ocge (c3d engine).

Код:

**** Build of configuration Default for project helloworld ****

C:\android-ndk2\ndk-build.cmd all
"Compile++ thumb : helloworld <= main.cpp

In file included from jni/../../../include/glm/ext.hpp:102:0,
                from jni/../../../include/types.h:135,
                from jni/../../../include/ocge.h:4,
                from jni/main.cpp:5:
jni/../../../include/glm/./gtx/matrix_query.hpp:45:18: fatal error: limits: No such file or directory
compilation terminated.
make: *** [obj/local/armeabi/objs/helloworld/main.o] Error 1

**** Build Finished ****

При добавлении расширения <limits.h> инклудит нормально. Пришлось все вхождения подправить.
Может есть конфликт с разными версиями этого файла? Или есть что-то с таким именем?
У меня установлена RAD Studio, оттуда инклудить может, хотя в путях проекта указаны только пути к движку и к ндк. Ещё добавил путь к MinGW - не помогло.
Ещё вот с этим проблема:
#include <string> - решено добавлением .h
#include <cstdarg> - а вот это не решено, добавление .h не помогло, всё равно пишет "fatal error: cstdarg: No such file or directory".

Все эти заголовочные файлы - limits, string, cstdarg есть в инклудах ndk, mingw, rad studio.

wtf?

HolyDel 20.08.2012 18:10

Ответ: Проблемы с нативным код
 
stdarg.h

pozitiffcat 20.08.2012 20:18

Ответ: Проблемы с нативным код
 
А уверен что пути к НДК прописаны C:\android-ndk2\ ?

Жека 21.08.2012 08:38

Ответ: Проблемы с нативным код
 
Посоны, я проиграл. :(
Заменил
#include <cstdarg>
на
#include <stdarg.h> - сработало
И дальше беда:
Код:

In file included from jni/../../../include/ocge.h:6:0,
                from jni/main.cpp:5:
jni/../../../include/IString.h:4:20: fatal error: iostream: No such file or directory

iostream - это уже слишком.
Блин, я чё-то не так делаю.

При наведении на строку с инклудом и щелчке мышью ничего не происходит. Я пошёл дальше, нашёл где лежит файлик iostream, это оказалась папка E:\dev\MinGW\lib\gcc\mingw32\4.6.2\include\c++, добавил её в пути проекта, теперь ctrl+лкм открывает файл. Но при компиляции та же ошибка - файл не найден.
Причём при добавлении нового пути с инклудами в проект эклипс предлагает проиндексировать папку, я соглашаюсь.

Ещё что интересно - в прошлую пятницу я нормально компильнул этот проект, я тогда ещё не знал про настройку "с/с++ build" в эклипсе, и потому на ошибку "ndk-build.cmd не найден по адресу C:\android-ndk\ndk-build.cmd" я просто скопировал папку с ндк на диск С. путь в системной переменной прописал.
Теперь думаю - не приснилось ли мне это всё?
Возможно в настройках ещё что-то надо указать, хз что.

Почему эклипс не находит заголовочный файл, который лежит в подкаталоге, указанном в путях проекта?

Пути к сдк и ндк прописаны в системной переменной Path.

Использую Eclipse Classic 4.2.

Продолжаю вникать в книжку Android NDK Beginner's Guide

pozitiffcat 21.08.2012 09:00

Ответ: Проблемы с нативным код
 
все инклуды брать из NDK!!!
+ ко всему, что бы можно было юзать stl добавить файлик Application.mk в каталог jni твоего проекта и в нем написать
Код:

APP_STL := stlport_static
APP_ABI := armeabi armeabi-v7a
APP_OPTIM := release
LOCAL_ARM_MODE := thumb


Жека 21.08.2012 10:01

Ответ: Проблемы с нативным код
 
Цитата:

Сообщение от pozitiffcat (Сообщение 236807)
все инклуды брать из NDK!!!

Угу, я от безысходности дурью маялся с добавлением отовсюду.
Цитата:

+ ко всему, что бы можно было юзать stl добавить файлик Application.mk в каталог jni твоего проекта и в нем написать
Код:

APP_STL := stlport_static
APP_ABI := armeabi armeabi-v7a
APP_OPTIM := release
LOCAL_ARM_MODE := thumb


Я веду речь о демке твоего движка под андроид.:) Там вот что в файле Application.mk:
Код:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := helloworld
### Add all source file names to be included in lib separated by a whitespace
LOCAL_SRC_FILES := main.cpp
LOCAL_CPPFLAGS += -I./
LOCAL_CPPFLAGS += -D _ANDROID

LOCAL_LDLIBS += -L$(LOCAL_PATH)/../libs/armeabi/
LOCAL_CPPFLAGS += -IC:/android-ndk/sources/cxx-stl/stlport/stlport
LOCAL_LDLIBS += -locgeAndroid

include $(BUILD_SHARED_LIBRARY)

Вот оно - абсолютный путь к твоей ндк! :) Я такую же папку из своей ндк в пути проекта добавлял - не помогало (я нуб, оказывается в таких делах).

Вроде теперь дело за малым - компилит, но не может найти либу ocgeAndroid:
Код:

"E:\\dev\\android-ndk\\ndk-build.cmd" all
SharedLibrary  : libhelloworld.so

e:/dev/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -locgeAndroid
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libhelloworld.so] Error 1

Я не знаю куда её скинуть. Если в папку libs, то перед компиляцией оттуда всё удаляется.

pozitiffcat 21.08.2012 16:42

Ответ: Проблемы с нативным код
 
А что разве Мастер проектов мой не работает?
Код:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := helloworld
### Add all source file names to be included in lib separated by a whitespace
LOCAL_SRC_FILES := main.cpp
LOCAL_CPPFLAGS += -I./
LOCAL_CPPFLAGS += -D _ANDROID

LOCAL_LDLIBS += -L$(LOCAL_PATH)/../libs/armeabi/
LOCAL_CPPFLAGS += -IC:/android-ndk/sources/cxx-stl/stlport/stlport
LOCAL_LDLIBS += -locgeAndroid

include $(BUILD_SHARED_LIBRARY)

этот твой код не в application.mk а в android.mk должен быть это 2 разных файла

это я делаю для подключения библиотеки
Код:

LOCAL_LDLIBS += -L$(LOCAL_PATH)/../libs/armeabi/
LOCAL_LDLIBS += -locgeAndroid


Жека 21.08.2012 16:50

Ответ: Проблемы с нативным код
 
Точно разные файлы, я не обратил внимания.
Мастер не работает, хочет .net 4.0.3 - видимо это 4й с сервис-паком, я установил просто 4й - не заработало и я забил.
У тебя в структуре каталогов в мастере установки обе либы лежат в папке libs, но удаляются же они оттуда, как этого избежать? :)

pozitiffcat 21.08.2012 19:05

Ответ: Проблемы с нативным код
 
они не там должны лежать, это для мастера они там лежат, попробуй фреймворк устаови

Жека 23.08.2012 08:51

Ответ: Проблемы с нативным код
 
Не смог найти установщик .net 4.0.30319, который требуется. Нашёл только, что это обновление, которое ставит либо винда сама либо msvs 2010, студии у меня нет, винда не установила.
У меня вин 7 х64.

Кстати, разве нельзя для .net приложений компильнуть так, чтоб всё нужное было в ехе-шнике? Пусть он получится мег-два-больше, зато не нужно париться.

HolyDel 23.08.2012 11:24

Ответ: Проблемы с нативным код
 
Цитата:

Кстати, разве нельзя для .net приложений компильнуть так, чтоб всё нужное было в ехе-шнике? Пусть он получится мег-два-больше, зато не нужно париться.
нет. но можно было бы использовать фремворк 2. который есть уже наверное везде. или вообще сделать без фреймворка на дельфи. или сделать в виде коммандной строки на плюсах.

Жека 23.08.2012 11:45

Ответ: Проблемы с нативным код
 
Или .bat-ничег вообще.

pozitiffcat 23.08.2012 22:40

Ответ: Проблемы с нативным код
 
Вложений: 1
Да будет тебе счастье, замени exe-шник

Жека 24.08.2012 09:13

Ответ: Проблемы с нативным код
 
Спасибо, работает!
Но по-прежнему проблема - в итоговый apk не инклудится либа ocgeAndroid, хз почему.
Создал проект с помощью мастера, скомпилил, в папке \libs\armeabi\ появился файл libocge_new.so, и установился в apk, а вот файл \libs\armeabi-v7a\libocgeAndroid.so удалился перед компиляцией, его в эту папку мастер скопировал.

pozitiffcat 25.08.2012 16:39

Ответ: Проблемы с нативным код
 
вообще мастер для eclipse indigo а у тебя juno, может из-за этого, у меня ниче не удаляется!
Я настраиваю проект в своем мастере, потом выбираю папку куда сохраниь проект (save). Потом делаю в eclipse import этого проекта, запускаю сразу и он работает. Ничего больше настраивать не надо.


Часовой пояс GMT +4, время: 11:09.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot