无法找到过程入口点__gxx_personality_v0 libstdc ++ - 6.dll

时间:2015-06-25 15:39:11

标签: python c++ c ctypes

感谢这个问题已被提出并回答了几个案例,但我仍然遇到问题。我的目录结构如下:

models/
    bs/
        __init__.py
        values.py
    optlib/
        Makefile
        bin/
            optlib.so       # generated after compilation/linking
            libstdc++-6.dll
        inc/
            optlib.h
            stats.h
        obj/
            optlib.o        # generated after compilation/linking
            stats.o         # generated after compilation/linking
        src/
            optlib.cc
            stats.cc

简而言之,我的源文件位于srcinc中的头文件,目标文件输出到obj,共享库文件输出到bin

我使用以下命令(从Makefile中提取)编译和链接了C / C ++库:

g++ -c -Iinc -o obj/optlib.o src/optlib.cc
g++ -c -Iinc -o obj/stats.o src/stats.cc

g++ -shared -Wl,-soname,bin/optlib.so -o bin/optlib.so obj/optlib.o obj/stats.o

我在Windows 7计算机上使用MinGW并尝试使用ctypes从Python访问共享库。我已将libstdc++-6.dll C:\MinGW\bin文件放入包含共享库bin的{​​{1}}目录,optlib.so正如许多帖子所示。

我的Python代码如下(注意__init__.py导入values.py):

# neither the os.path.abspath method of building the path works...
fn = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'optlib', 'bin', 'optlib.so'))
print type(fn) # returns <type 'unicode'>
# or actually implicitly typing it out
#fn= u'C:\\Users\\striji\\Desktop\\models\\optlib\\bin\\optlib.so'
LOAD_WITH_ALTERED_SEARCH_PATH=0x00000008
kernel32 = WinDLL('kernel32')
kernel32.LoadLibraryExW.restype = c_void_p
hMod = kernel32.LoadLibraryExW(fn, None, LOAD_WITH_ALTERED_SEARCH_PATH)
lib = CDLL(fn, handle=hMod)

def fcn(x):
    lib.c_func.argtypes = [c_double]
    lib.c_func.restype = c_double
    x = byref(c_double(x))
    return lib.c_func(x)

当我尝试使用以下内容导入模块时:

>>> from models import bs

我收到以下错误:

WTF

C:\MinGW\bin位于我的PATH变量上。实际上C++包含在extern "C"中的源代码,以便ctypes可以看到它。这些是非常简单的C++函数。如果您需要查看来源,我可以发帖。

然后问题是双重的。首先,我如何解决眼前的问题。第二,是否有可能简化编译和链接过程,因此它与系统无关(即在Mac OSX和Linux上编译和链接)?

0 个答案:

没有答案