গ্রন্থাগার হিসাবে জিসিসি ব্যবহার করার কোনও উপায় আছে কি?


10

যে কেউ এমন সমাধান জানেন যা এই জাতীয় কাজ করে:

#include <stdio.h>
#include <gcc.h> /* This .h is what I'm looking for. */

int main (void) {
    /* variables declaration (...) */

    /* The following line is supposed to be equivalent to:
     *     $ gcc main.c -o main */
    results = gcc_compile_and_link("main.c", "main");

    /* Now I want to use the warnings and errors to do something.
     * For instance, I'll print them to the console: */
    printf("warnings:\n");
    for (i=0; i<results.warns_len; i++)
        printf("%s\n", results.warings[i].msg);
    printf("errors\n");
    for (i=0; i<results.errs_len; i++)
        printf("%s\n", results.errors[i].msg);

    /* free memory and finalize (...) */
    return 0;
}

আমি জানি যে আমি কাঁটাচামচায় "gcc main.c -o main" কমান্ডটি চালিয়ে আউটপুট পার্স করতে পারি ... তবে আমি উপরের উদাহরণের মতো আরও কিছু ' নির্ভরযোগ্য ' খুঁজছিলাম ।

উত্তর:


10

টুলস বেস / লাইব্রেরি হিসাবে ব্যবহৃত হচ্ছে তা প্রতিরোধ করার জন্য জিসিসি স্পষ্টভাবে তৈরি করা হয়েছিল। এর জন্য আপনার কলঙ্ক ব্যবহার করতে হবে বা কমান্ডলাইনের মাধ্যমে জিসিসি কল করা উচিত।


3
আপনি কি ডিজাইন সিদ্ধান্তের কারণ জানেন?
সর্বোচ্চ

libgccjitসে দিকে কাজ করছে, যদিও এটি একটি
উত্সাহী

6

libgccjit

জিসিসি 5-তে পরিচিত এবং এটি এখনও জিসিসি 6 হিসাবে পরীক্ষামূলক।

দস্তাবেজ: https://gcc.gnu.org/onlinesocs/jit/

সম্পর্কিত প্রশ্নাবলী:


3

এটি জিসিসি দিয়ে সম্ভব নয় তবে আপনি যা মনে করছেন তার জন্য আপনি টিসিসি (একটি এম্বেডেবল সি সংকলক) যথেষ্ট ভাল খুঁজে পেতে পারেন। বিতরণটি একটি libtcc লাইব্রেরির সাথে আসে যা "ফ্লাইতে" সি কোড সংকলন, লিঙ্ক এবং চালানোর অনুমতি দেয়।

মনে রাখবেন এটি কেবল সি এর জন্য, আপনার প্রশ্নকেও সি ++ ট্যাগ করা হয়েছে তবে আমি সি ++ এর জন্য টিসিসি-র কোনও সমতুল্য দেখিনি।


লক্ষ্য করুন যে tccদ্রুত সংকলন করে, তবে একেবারেই অনুকূল নয়। উত্পন্ন কোডটি যা gcc -O2উত্পাদন করবে তার তুলনায় প্রায় 3 থেকে 10 গুণ ধীর হয় ।
বেসাইল স্টারিনকিভিচ

2

আমি সন্দেহ করি যে জিসিসি ফোরক করার চেয়ে আরও ভাল কিছু আছে। আপনি ঝনঝনাকে বিবেচনা করতে পারেন, যা এই ধরণের ব্যবহারের জন্য আরও নকশাকৃত।


2

(আমি অনুমান করছি আপনি লিনাক্স বা ম্যাকোএসএক্সের মতো কিছু পসিক্স সিস্টেমে রয়েছেন)

আপনার অবশ্যই স্পষ্টতই জিসিসিআইটি-র দিকে নজর দেওয়া উচিত , যেমন সিরো সান্তিলি বলেছিলেন । তারপরে আপনি উত্পন্ন কোডটির কিছু এএসটি- মতো উপস্থাপনা তৈরি করবেন। অবশ্যই আপনি পরিবর্তে এলএলভিএম , বা এমনকি কিছু সহজ জেআইটি লাইব্রেরি যেমন লিবিজিট বা জিএনইউ বজ্রপাত বিবেচনা করতে পারেন (তবে libjitএবং lightningদ্রুত কোড নির্গমন করছে, তবে নির্গত কোডটি ধীর এবং অপরিশোধিত)।

তবে, আপনি এখনও একটি অস্থায়ী ফাইলে কিছু সি কোড নির্গমন এবং এটির সংকলন তৈরির কথা বিবেচনা করতে পারেন (যেমন ভাগ করা লাইব্রেরি হিসাবে আপনি পরে dlopen (3) এবং dlsym (3) ব্যবহার করে একটি প্লাগইন হিসাবে গতিশীলভাবে লোড করতে পারেন, এখানে এবং এখানে দেখুন বিস্তারিত জানার জন্য.

একটি গুরুত্বপূর্ণ বিষয় লক্ষ করুন: অনুকূলিত কোড উত্পন্ন করতে সিপিইউ সময় লাগে (জিসিসিআইটি, বা এলএলভিএম সহ, বা চালিয়ে gcc -O2) কারণ এটি একটি কঠিন কাজ। সুতরাং একটি gccপ্রক্রিয়া কাঁটাচামচা করার ওভারহেড (বা কিছু অন্যান্য সংকলক ব্যবহার করে clang) যেমন নগণ্য (জিসিসিআইটি বা এলএলভিএমের মতো কিছু লাইব্রেরি ব্যবহার করে আর্ট)।

প্রকৃতপক্ষে, আমার অভিজ্ঞতা ( জিসিসি মেল্টে ) হ'ল বর্তমান ডেস্কটপ এবং ল্যাপটপে, সি কোডের কয়েকশ লাইন নির্গত করে এবং সেগুলির একটি সংকলন তৈরি করা ব্যবহারকারীর মিথস্ক্রিয়তার সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য যথেষ্ট দ্রুত (এক বা দুই দশমাংশ) is সুতরাং আজ, আপনি একটি REPL যা বিবেচনা করতে পারে তা বিবেচনা করতে পারে । আরও দেখুন এই সংশ্লিষ্ট উত্তর।

কমন লিস্প এবং এসবিসিএল এও দেখুন যা একটি বাস্তবায়ন যা প্রতিটি আরপিএল ইন্টারঅ্যাকশনটিতে মেশিন কোডে সংকলিত হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.