Note that there are some explanatory texts on larger screens.

plurals
  1. POTCC with Visual Studio 2012
    primarykey
    data
    text
    <p>I am trying to integrate Visual C++ 2012 and TCC in such as way as to send in a C function (as a string) into the tcc compiler (libtcc.dll). I have added the libtcc.h header file, though I am unsure how to add the libtcc.dll since there is no corresponding .lib file. I am using the libtcc_test.c file in the TCC distribution as my Win32 main() function. </p> <p>Here is my main:</p> <pre><code>#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include "stdafx.h" #include "libtcc.h" int add(int a, int b) { return a + b; } char my_program[] = "int fib(int n)\n" "{\n" " if (n &lt;= 2)\n" " return 1;\n" " else\n" " return fib(n-1) + fib(n-2);\n" "}\n" "\n" "int foo(int n)\n" "{\n" " printf(\"Hello World!\\n\");\n" " printf(\"fib(%d) = %d\\n\", n, fib(n));\n" " printf(\"add(%d, %d) = %d\\n\", n, 2 * n, add(n, 2 * n));\n" " return 0;\n" "}\n"; int main(int argc, char **argv) { TCCState *s; 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 */ if (argc == 2 &amp;&amp; !memcmp(argv[1], "lib_path=",9)) tcc_set_lib_path(s, argv[1]+9); /* MUST BE CALLED before any compilation */ tcc_set_output_type(s, TCC_OUTPUT_MEMORY); if (tcc_compile_string(s, my_program) == -1) return 1; /* as a test, we add a symbol 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); /* relocate the code */ if (tcc_relocate(s, TCC_RELOCATE_AUTO) &lt; 0) return 1; /* get entry symbol */ func = tcc_get_symbol(s, "foo"); if (!func) return 1; /* run the code */ func(32); /* delete the state */ tcc_delete(s); return 0; } </code></pre> <p>When I attempt to run it, I get the following errors in Visual Studio 2012:</p> <pre><code>error C3861: 'exit': identifier not found error C3861: 'memcmp': identifier not found error C2440: '=' : cannot convert from 'void *' to 'int (__cdecl *)(int)' </code></pre> <p>Does anybody have a solution to this?</p> <p>Thanks!</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload