CMake를 사용하여 컴파일 된 C++ 프로젝트에 파이썬 파일을 포함하려고합니다. 나는 모든 것이 잘 작동CMake를 사용하여 임베디드 파이썬으로 컴파일 + 가져 오기 오류
g++ $(python-config --cflags) -o test $(python-config --ldflags) ./test.cpp
how to link python static library with my c++ program에서
#include <Python.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
setenv("PYTHONPATH", ".", 0);
char hostname[] = "localhost";
PyObject *pName, *pModule, *pFunc;
PyObject *pArgs, *pValue;
Py_Initialize();
pName = PyString_FromString("GetHostname");
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if(pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, "GetHostname");
if (pFunc && PyCallable_Check(pFunc)) {
pArgs = PyTuple_New(1);
pValue = PyString_FromString(hostname);
PyTuple_SetItem(pArgs, 0, pValue);
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL) {
printf("The IP address is %s\n", PyString_AsString(pValue));
Py_DECREF(pValue);
}
else {
Py_DECREF(pFunc);
Py_DECREF(pModule);
PyErr_Print();
fprintf(stderr, "Call Failed\n");
return 1;
}
}
else {
if (PyErr_Occurred())
PyErr_Print();
fprintf(stderr, "Cannot find function\n");
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
}
else {
PyErr_Print();
fprintf(stderr, "Failed to load file\n");
return 1;
}
Py_Finalize();
return 0;
}
그리고
import socket
def GetHostname(hostname):
addr = socket.gethostbyname(hostname)
return addr
사용하여 컴파일
는 우선이 두 파일을 사용하여이 독립을했다.
하지만이 때문에 내가 CMakeLists.txt에서
Traceback (most recent call last):
File "/src/GetHostname.py", line 1, in <module>
import socket
File "/usr/lib64/python2.6/socket.py", line 46, in <module>
import _socket
ImportError: /usr/lib64/python2.6/lib-dynload/_socketmodule.so: undefined symbol: PyExc_ValueError
내가 선을
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
include_directories (${PYTHON_INCLUDE_DIRS})
add_library (GetHostname MODULE GetHostname.cc)
target_link_libraries(GetHostname ${PYTHON_LIBRARIES})
CONFIGURE_FILE(${PATH_TO_SOURCE}GetHostname.py ${PATH_TO_BUILD}GetHostname.py COPYONLY)
기반을 추가 취득을 컴파일 한 후 뭔가 잘못하고 있어야합니다 CMake와 I를 사용하여 컴파일 된 프로젝트에 포함되어 있습니다 이 스레드에 Python.h: No such file or directory
모두 컴파일하지만 오류로 인해 파이썬 모듈을로드하지 못했습니다. 내가 CMake에서 파이썬 라이브러리를 올바르게 링크하지 않았습니까?
왜 실패했는지 설명 할 수있는 생각은 환영합니다. 파이썬 2.6
내가 그이 C에서 할 수 있습니다 알고 있어요 ++ 그러나 이것이 내가 C에서 다시 작성 그래서 포함 할 필요가있는 유일한 파이썬 모듈이 아닌 사용
는++ 내가 찾고 대답하지 않습니다 . 또한 localhost의 IP 주소를 알고 있습니다. 이것은 테스트 목적으로 만 사용됩니다.