this is my test.cpp file.(I also used makefile to create dll file)
//#include <iostream>
int foo(int a)
{
if (a > 1)
return a + 1;
else
return a + 2;
}
when I run following code in python
import os
import ctypes
lib_bfs = ctypes.WinDLL("D:\advanced_programming\HW7\cpp_part\libtest.dll")
print(lib_bfs)
everything is ok and I get this output from python.
<CDLL 'D:advanced_programmingHW7cpp_partlibtest.dll', handle 69d00000 at 0x2b7677e6400>
but when I change my test.cpp in this way(I just uncommented iostream):
#include <iostream>
int foo(int a)
{
if (a > 1)
return a + 1;
else
return a + 2;
}
I get the following error from python.
Traceback (most recent call last):
File "d:/advanced_programming/HW7/cpp_part/connector.py", line 4, in <module>
lib_bfs = ctypes.WinDLL("D:\advanced_programming\HW7\cpp_part\libtest.dll")
File "c:usersaliappdatalocalprogramspythonpython38libctypes__init__.py", line 373, in __init__
self._handle = _dlopen(self._name, mode)
FileNotFoundError: Could not find module 'D:advanced_programmingHW7cpp_partlibtest.dll' (or one of its dependencies). Try using the full path with constructor syntax.
this is also my dependencies enter image description here
by the way I have to mention that when I use Linux, everything is just fine.(I just used .so files) but there might be some problem with windows
I appreciate your help.
Advertisement
Answer
thanks to @DhirajWishal first I added the following line in my makefile.
g++ -std=c++17 -O3 -I./h -g -fPIC -shared ./cpp/test.cpp -o ./libtest.dll -static-libgcc -static-libstdc++
then I placed libwindpthread-1.dll (which was in F:/strawberry/c/bin/ dir ) next to my makefile and the problem was solved.