python 嵌入c语言_python中嵌入C语言脚本

如果在windows下使用mingw编译当前的TinyCC,嵌入C脚本会报错:

tcc: file '/c/Program Files/tcc/libtcc1.a' not found

Doug Currie在tcc的邮件列表里面提供了一个补丁:

Here is what I did (and reported to the mailing list) last February,

so the patch may not be accurate for more recent versions, but the

issues are the same...

I have been able to create a libtcc.dll for WinXP using MinGW/MSYS;

the changes that were necessary were very minor. Perhaps this

description will help others use libtcc on Windows.

First, a small bug to report:

In tcc.c the function tcc_basename() follows the line:

#if !defined(LIBTCC)

but the function tcc_basename() is used in pe_build_exports() in

tccpe.c -- moving the #if line below the function tcc_basename()

eliminates a link error building libtcc.dll in PE target mode.

Second, configuring and making tcc with MSYS places a pathname in

config.h in MSYS format. For example, I passed the argument

--prefix=/c/Dev/tcc

to configure; this path was good for building tcc.exe and didn't

contain any spaces, unlike the default path. This creates the line

#define CONFIG_TCCDIR "/c/Dev/tcc"

in config.h. Manually changing this line to

#define CONFIG_TCCDIR "C:/Dev/tcc"

enables libtcc.dll to find the include files and libraries once the

library is built. [The application tcc.exe avoids this problem by

setting tcc_lib_path from the application's directory at startup. A

similar solution could be used for the library using DllMain.]

So, after configure, fix CONFIG_TCCDIR in config.h and make.

Finally, the library libtcc.dll can be built with the MSYS command:

gcc -O2 -shared -Wall -Wl,--export-all-symbols /

-mpreferred-stack-boundary=2 /

-march=i386 -falign-functions=0 -fno-strict-aliasing /

-DTCC_TARGET_PE -DLIBTCC -o libtcc.dll tcc.c

Below is a diff of tcc-0.9.23 tcc.c and the changes for LIBTCC with

TCC_TARGET_PE and DLL location of library files.

Regards,

e

$ diff -u ../tcc-0.9.23-o/tcc.c tcc.c

--- ../tcc-0.9.23-o/tcc.c       Fri Jun 17 18:09:15 2005

+++ tcc.c       Tue Feb 28 17:03:44 2006

@@ -10157,8 +10157,6 @@

flag_name, value);

}

-#if !defined(LIBTCC)

-

/* extract the basename of a file */

static const char *tcc_basename(const char *name)

{

@@ -10175,6 +10173,35 @@

return p;

}

+#if defined(LIBTCC)

+

+#ifdef WIN32

+int __stdcall DllMain(void * hinstDLL, unsigned long fdwReason, void *

lpvReserved)

+{

+    if (fdwReason == 1/*DLL_PROCESS_ATTACH*/)

+    {

+    /* on win32, as implemented in main()

+       we suppose the lib and includes are at the location of this library

+    */

+        static char path[1024];

+        char *p, *d;

+

+        GetModuleFileNameA(hinstDLL, path, sizeof path);

+        p = d = strlwr(path);

+        while (*d)

+        {

+            if (*d == '//') *d = '/', p = d;

+            ++d;

+        }

+        *p = '/0';

+        tcc_lib_path = path;

+    }

+    return 1 /*TRUE*/;

+}

+#endif

+

+#else /* !LIBTCC */

static int64_t getclock_us(void)

{

#ifdef WIN32

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值