טיפים לעבודה ב־C++‎ באנדרויד

בשבועות האחרונים עבודה אני עובד על יישום C++‎ שבגדול אמור לרוץ על אנדרויד. החלטתי בתור התחלה לכתוב את זה על PC רגיל כדי להשתמש בכלים פשוטים ורגילים (QtCreator, cmake, valgrind ועוד…). ברגע ההסבה לאנדרויד נתקלתי בכמה דברים:

  1. לגרום ל־cmake לקמפל עבור אנדרויד לא מסובך מדי, רק לקבוע כמה משתני סביבה לפני ההרצה של cmake וזהו. פרטים כאן: http://opekar.blogspot.com/2011/06/android-cmake-is-much-easier-in-ndk-r5b.html
  2. להשתמש בקבצי הכללה של C++ ואז לעשות using namespace זה מגניב, אבל לא עובד. ב־NDK האחרון הם לא נמצאים. פשוט תשתמשו בקבצי ההכללות הישנים והטובים של C.
  3. בעת הקישור (linking) אין צורך לקשר את pthreads, הפונקציות של threads נמצאות ישירות ב־Bionic. אין צורך לעשות -lpthread.
  4. אם אתם משתמשים בטריקים מלוכלכים כמו לקרוא ישירות ל־syscall יהיו לכם בעיות. השמות של הקריאות שונה. אני לא מסביר מעבר לכך כאן, מי שמספיק חכם לעשות דברים כאלו יידע למצוא את השמות המאימים ולעשות את ההתאמה בעזרת ifdef במקום מרכזי אחד (אני הגדרתי מחדש לפי השמות של glibc).

בשביל מספר 3 (חחח) אני השתמשתי בקטע קוד הזה בקובץ cmake שלי:

if( $ENV{BUILD_ANDROID})

    message(“Building for android, not linking pthread”)
else()
message(“Building for glibc, linking pthread”)
target_link_libraries(my_super_cool_application pthread)
endif()

וזה אומר שלפני ההפעלה של cmake רק צריך להגדיר עוד משתנה סביבה BUILD_ANDROID=1. פשוט שמתי אותו ב־script שקישרתי בתחילת הפוסט ואני עושה לו source לפני הבנייה.

מצד שני, היישום שלי עבד על הפעם הראשונה שם (וזה עוד client server…). זה אומר שהסבה של יישום מ־amd64 אל arm32 עבדה חלק מצד האפליקציה והיו לי רק בעיות build system פשוטות (שלקחו לי כמעט שעתיים…). כן, גוגל עשו פאקים ב־NDK, אבל בגדול, מגניב 🙂

עוד משהו שלמדתי מחדש, כמה חשוב זה לעשות out of source builds. ככה אני יכול באותו זמן לבנות את היישום לשתי פלטפורמות שונות בקלות.

Share

ראיון עם RMS ב־LAS

שמעתי היום ראיון חדש עם ד"ר סטאלמן, הלא הוא האבא של מיזם גנו והוגה ראיון התוכנה החופשית ב־Podacst של The Linux Action Show, ה־podcast עם הפתיח הכי מאאאאאאאאגניב אי פעם, מומלץ לשמוע עם אוזיות או באוטו. הינה הקישר: http://www.jupiterbroadcasting.com/17822/richard-stallman-gnulas-s20e10/

בגדול, האיש סתום יותר מכרגיל. הוא ממש לא איש נורמאטיבי (הוא אמר למראיין שהוא מעדיף שביתו תרעב והוא לא יתפרנס מכתבית יישומים קינייניים, והוא רמז שעדיף שאמריקה לא תתרבה יותר). מצד שני, הוא אמר דברים מאוד חכמים על ספרים דיגיטאלים: הם בגדול מונעים ממשתמשים את רב הזכויות שיש לנו עם ספרים "רגילים". למשל, הזכות לקנות אותו באופן אנונימי בחנות, על ידי  תשלום במזומן – ספרים דיגיטאלים תמיד נקנים בחנויות דיגיטאליות ששומרות את בסיס הנתונים של האנשים שקנו אותו. אי אפשר להשאיל אותם, למכור אותם מחדש לאחר שקראת אותם. 

הוא דיבר על ה־secure boot שמיקרוסופט העלו לכותרות בזמן האחרון. הוא אומר בצדק שהראיון הזה יכול לשמש לאבטחה, כל עוד המשתמש שולט על מתג הכיבוי אבל המימוש שמיקרוסופט מבקשת מספקי החומרה על ARM בעצם ממשים לא הגנה אלא מניעת שירות (restriction). מאוד מעניין לשמוע דברים משכילים כאלו.

כמו כן, אני חייב להזכיר את הראיון שלו ב־TLLTS (זה הראיון השני, היותר מצחיק לפי דעתי): http://tllts.org/audio/tllts_165-11-01-06.ogg ומי שלא יודע, זהו הראיון השני שלו ב־podcast ההוא, הראשון נמצא כאן: http://tlltsarchive.org/archives/tllts_79-04-13-05.ogg. שיא ל־podcast ההוא, מישהו שמע את RMS באותו מקום פעמיים? מצחיק אותי מה שאמרו בסוף הראיון השני – "אתה חושב שהוא יבוא לראיון שלישי?" 🙂

כמובן, אי אפשר בלי משהו באמת מצחיק, מבית הפורומים של אובונטו.

Share