繁体   English   中英

如何链接C lib与python在Windows下嵌入?

[英]How to link C lib against python for embedding under Windows?

我正在编写一个用C编写的应用程序。应用程序的一部分应该嵌入python并且存在我当前的问题。 我尝试将我的源链接到Python库,但它不起作用。

当我使用MinGW时,我使用dlltool从python26.lib创建了python26.a文件,并将* .a文件放在C:/Program Files (x86)/python/2.6/libs

因此,我使用以下命令编译该文件:

gcc -shared -o mod_python.dll mod_python.o "-LC:\Program Files (x86)\python\2.6\libs" -lpython26 -Wl,--out-implib,libmod_python.a -Wl,--output-def,mod_python.def

我得到了那些错误:

Creating library file: libmod_python.a
mod_python.o: In function `module_init':
mod_python.c:34: undefined reference to `__imp__Py_Initialize'
mod_python.c:35: undefined reference to `__imp__PyEval_InitThreads'
... and so on ...
  • 我的Python“root”文件夹是C:\\Program Files (x86)\\python\\2.6
  • Devsystem是Windows Server 2008
  • GCC信息: Reading specs from C:/Program Files (x86)/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --with-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debug Thread model: win32 gcc version 3.4.5 (mingw-vista special r3)

我做错了什么? 我如何编译和链接:-)?

干杯,格雷戈尔


编辑:我忘了写有关我的Python安装的信息:这是官方的python.org安装2.6.1

...以及我如何创建python.a文件:

dlltool -z python.def --export-all-symbols -v c:\windows\system32\python26.dll

dlltool --dllname c:\Windows\system32\python26.dll --def python.def -v --output-lib python26.a

在Windows上,python发行版已经在libs libpython26.a中提供了libpython26.a ,因此不需要使用dll工具生成.a文件。

我确实用一个C文件toto.c尝试了一个小例子:

gcc -shared -o ./toto.dll ./toto.c -I/Python26/include/ -L/Python26/libs -lpython26

它就像一个魅力。 希望它会有所帮助:-)

Python(至少我的发行版)带有一个“python-config”程序,可以自动为各种情况创建正确的编译器和链接器选项。 但是,我从未在Windows上使用它。 也许这个工具可以帮到你吗?

IIRC,dlltool并不总是有效。 拥有python 2.6 + Wow使得工作的可能性更小。 对于numpy,我就是这样做的 基本上,我使用obdump.exe从dll构建表,我解析它生成.def。 您应该检查缺少的符号是否在.def中,否则它将不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM