Правильная настройка крошечного cc в Visual Studio 2019, библиотека libtcc1-32.a не найдена - PullRequest
0 голосов
/ 09 февраля 2020

Я использую tcclib для компиляции и запуска C кода на лету в моем проекте C ++.

Я использую представленные здесь двоичные файлы https://bellard.org/tcc/

Затем я открываю приглашение разработчика vs2019 и запускаю обе эти команды

lib /def:libtcc\libtcc.def /out:libtcc.lib
cl /MD examples/libtcc_test.c -I libtcc libtcc.lib

Мой код работает нормально, я использую этот код. Этот код похож на тот, который можно найти в примере tcclib, а именно: https://repo.or.cz/tinycc.git/blob/HEAD: / tests / libtcc_test. c (это еще один репозиторий, но это тот же код.

Код, который я запускаю, является следующим. Он находится внутри extern "C" {}.

int tcc_stuff(int argc, const char** argv) {
    TCCState* s;
    int i;
    int (*func)(int);

    s = tcc_new();
    if (!s) {
        fprintf(stderr, "Could not create tcc state\n");
        exit(1);
    }

    /* if tcclib.h and libtcc1.a are not installed, where can we find them */
    for (i = 1; i < argc; ++i) {
        const char* a = argv[i];
        if (a[0] == '-') {
            if (a[1] == 'B')
                tcc_set_lib_path(s, a + 2);
            else if (a[1] == 'I')
                tcc_add_include_path(s, a + 2);
            else if (a[1] == 'L')
                tcc_add_library_path(s, a + 2);
        }
    }

    /* MUST BE CALLED before any compilation */
    tcc_set_output_type(s, TCC_OUTPUT_MEMORY);

    {
        const char* other_file = ReadFile2(argv[1]);
        if (other_file == NULL)
        {
            printf("invalid filename %s\n", argv[1]);
            return 1;
        }
        if (tcc_compile_string(s, other_file) == -1)
            return 1;
    }

    /* as a test, we add symbols that the compiled program can use.
       You may also open a dll with tcc_add_dll() and use symbols from that */
    tcc_add_symbol(s, "add", add);
    tcc_add_symbol(s, "hello", hello);

    /* relocate the code */
    if (tcc_relocate(s, TCC_RELOCATE_AUTO) < 0)
        return 1;

    /* get entry symbol */
    func = (int(*)(int))tcc_get_symbol(s, "foo");

    if (!func)
        return 1;

    /* run the code */
    msg(func(32));
    //msg(func2(4));

    /* delete the state */
    tcc_delete(s);

    return 0;

}

При запуске моего кода T CC имел ошибку

tcc: error: library 'libtcc1-32.a' not found

Я исправил это, поместив этот файл в каталог lib / рядом с моим .exe

. Я также скопировал папку include / для включения stdio.h et c.

. Мой вопрос: Зачем ему нужен этот файл в папке lib /, а не в предоставленном файле tcclib.dll? Можно ли "отправить" определенные заголовки, такие как stdio.h?

...