Objective C sinf misolidan foydalanib C funksiyasini chaqiring

Menda C tipidagi usul bilan Objective C sinfim bor. Men C++ kutubxonasi va C kutubxonasini o'z kodim bilan bog'lashim kerak. Agar biron-bir Objective C funktsiyasidan kutubxonaga qo'ng'iroq qilsam, belgilarni topa olmaydigan bog'lovchi xatolarini olaman.

ob'ektiv c da c++ statik kutubxonasidan foydalanish ga qarang.

Lekin men bu C funktsiyasini qandaydir tarzda chaqirishim kerak. Muqobil variant bormi? Faqat C kutubxonalari bo'lsa, men ob'ektiv C usulidan kutubxonaga qo'ng'iroq qilishim mumkin edi, lekin C ++ kutubxonasi buni amalga oshirishga ruxsat bermaydi. Negaligini bilmayman.


person neeraj    schedule 10.10.2012    source manba
comment
Xo'sh, siz C yoki C++ deb chaqirmoqchi bo'lgan funksiyami?   -  person    schedule 10.10.2012
comment
Boshqa savolga ko'ra, siz Objective C dasturidan C++ funksiyalarining eksport qilingan extern "C" interfeysiga qo'ng'iroq qilmoqchisiz. Bu tizimning bosh og'rig'iga sabab bo'ladi.   -  person Jonathan Leffler    schedule 10.10.2012
comment
@JonathanLeffler Nega bu? Agar funktsiya extern "C" deb e'lon qilingan bo'lsa, unda nomlarni o'zgartirish bilan bog'liq muammolar yuzaga kelmaydi ... Va Objective-C C ning qattiq to'plami bo'lgani uchun, Objective-C dan C funktsiyasini chaqirish muammo bo'lmasligi kerak ...   -  person    schedule 10.10.2012
comment
Men c ++ kutubxonasida funktsiyani chaqirishga harakat qilaman, bu esa o'z navbatida C kutubxonasida boshqa funktsiyani chaqirishga harakat qiladi. C++ kutubxonasi funksiyasini chaqirish uchun men Objective-C-da C-uslubidagi funksiyada barcha bunday funktsiya chaqiruvlarini yozishim kerak. Men c++ usulini (sarlavha fayllarida) extern C bilan e'lon qilishdan oldin harakat qildim, kompilyator xatoni ko'rsatadi.   -  person neeraj    schedule 10.10.2012


Javoblar (2)


Mening tajribamga ko'ra, agar dastur har qanday C++ sinflaridan foydalansa, to'g'ri C++ kutubxonalarini bog'lash uchun C++ kompilyatori bilan bog'lanishingiz kerak. Faqat C va C++ bilan bu juda oddiy.

Objective C ni aralashga kiriting va siz ba'zi qiyinchiliklarga duch kelishingiz mumkin - sizning savolingiz ba'zi qiyinchiliklarga duch kelayotganingizni anglatadi. Men buni sinab ko'rmadim, lekin ...

To'g'ri C++ kutubxonalari bog'langanligiga, to'g'ri Objective C kutubxonalari va sizga kerak bo'lgan har qanday adashgan C kutubxonalari bog'langanligiga ishonch hosil qilishingiz kerak. Agar siz Objective C dasturini yaratishda bog'langan kutubxonalarni aniqlay olsangiz, C++ kompilyatori bilan bog'lanish va sizga kerak bo'lgan Objective C va sof C kutubxonalarini ro'yxatlash uchun xavfsiz bo'lishingiz mumkin. Barmoqlar bir-biriga tegdi, hammasi shu. Objective C (shuningdek, C++ uchun murakkab talablar) uchun murakkab sozlash talablari mavjud bo'lsa, siz hali ham qiyinchiliklarga duch kelishingiz mumkin. Umuman olganda, siz yaxshi bo'lishingiz mumkin.

Agar aniq tajribaga ega bo'lgan kishi boshqacha gapirsa, ularning yechimi bilan boring (agar bu siz uchun ishlayotgan bo'lsa). Lekin men taklif qila oladigan eng yaxshi narsa bu "dasturni C++ kompilyatori bilan bog'lash".

person Jonathan Leffler    schedule 10.10.2012
comment
Men Objective-C++ deb nomlangan narsa haqida eshitganman, uning asosiy maqsadi Objective-C dan C++ kodini chaqirishga ruxsat berishdir. Bu erda foydali bo'ladimi? - person Mike DeSimone; 10.10.2012
comment
@MikeDeSimone Yo'q. Qurilish bosqichini o'tkazib yuboryapsiz. Objective-C++ bu kompilyatsiyakod uchun tushunchadir. OP uni bog'lashda qiyinchiliklarga duch keladi. - person ; 10.10.2012
comment
Qarang, c++ sarlavhasi fayllarida ba'zi "nomlar maydoni" bor edi, shuning uchun men ob'ektiv-C fayl turlarini ob'ektiv-c manba fayllaridan ob'ektiv-c ++ manba fayllariga aylantirishim kerak edi. Men buni qilganimda, ba'zi manbalar bog'lanish c++ kompilyatori orqali amalga oshirilishini aytadi. Qurilish sozlamalarida men fayllar turlari bo'yicha maqsadlarni bog'lashim mumkin bo'lgan variant ham mavjud. Agar fayl turlarini o'zgartirmasam, c++ ga qarshi kompilyatsiya qilish uchun -lstd++ bog'lovchi bayrog'ini qo'shishim kerak bo'ladi. - person neeraj; 10.10.2012

Qaysi kod sizga muammo tug'dirayotganiga ishonchim komil emas, lekin agar siz C++ faylida boshqa C faylidan aniqlangan C uslubidagi funksiyani chaqirmoqchi bo'lsangiz, nomning o'zgarishiga yo'l qo'ymaslik uchun funksiyani extern "C" deb belgilang.

person simonc    schedule 10.10.2012
comment
Menda c++ faylining manba kodi yo'q. Menda faqat sarlavha fayllarida api deklaratsiyasi mavjud. Funktsiyalar deklaratsiyasini extern C bilan belgilashga harakat qildim, lekin kompilyator bu haqda gapirdi. Men nima qilyapman, shu jumladan c++ kutubxonasi, uning misollarini e'lon qilish va uning usullarini ob'ektiv C funksiyasida chaqirish. Agar ob'ektiv C ning bu usuli C uslubida bo'lmasa, men bog'lovchi xatolarini olaman. - person neeraj; 10.10.2012