我正在使用 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 (这是另一个 repo,但它是相同的代码。
我运行的代码就是这个。这是在一个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;
}
运行我的代码时,TCC 出现错误
tcc: error: library 'libtcc1-32.a' not found
我通过将此文件放在我的 .exe 旁边的 lib/ 目录中来修复它
我还复制了 include/ 文件夹以包含 stdio.h 等。
我的问题是:为什么它需要 lib/ 文件夹中的这个文件,而不是提供的 tcclib.dll 文件?是否可以“运送”某些标头,例如 stdio.h?