包含 Python.h 但未建立 Py_initialze() 链接

发布于 2025-01-10 07:51:21 字数 1445 浏览 0 评论 0原文

尽管我在 CMake 中引用了 Python 库,但我遇到了 Py_initialize 的链接错误。找到了 Python.h,但未建立链接。

inpainting.cpp:(.text+0x47843): undefined reference to `Py_Initialize'
/usr/bin/ld: inpainting.cpp:(.text+0x47854): undefined reference to 
`PyRun_SimpleStringFlags'
/usr/bin/ld: inpainting.cpp:(.text+0x47940): undefined reference to `Py_Finalize'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/imgCodecs.dir/build.make:552: imgCodecs] Error 1
make[1]: *** [CMakeFiles/Makefile2:84: CMakeFiles/imgCodecs.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

这是我的 CMakeList。 https://pastebin.com/QkihgBGm

编辑:添加我尝试编译的方式。我在我的 makefile 上执行 Cmake 和 make。

这是我正在尝试编译的 C++ 代码。

// *********** Begin: Run Python script ************************************************************
// Initialize the Python Interpreter
Py_Initialize();
PyRun_SimpleString("import sys");
char buff[FILENAME_MAX]; //create string buffer to hold path
getcwd( buff, FILENAME_MAX);
string current_working_dir(buff);
string shore_working_dir = current_working_dir + 
"/shore_imputation/";
const char * shore_working_dir_c = shore_working_dir.c_str();
qDebug() << shore_working_dir_c;
// Finish the Python Interpreter
Py_Finalize();
// *********** End: Run Python script 
**************************************************************

I am facing a linking error for Py_initialize though I have a reference to my Python library in my CMake. The Python.h is found but the link is not established.

inpainting.cpp:(.text+0x47843): undefined reference to `Py_Initialize'
/usr/bin/ld: inpainting.cpp:(.text+0x47854): undefined reference to 
`PyRun_SimpleStringFlags'
/usr/bin/ld: inpainting.cpp:(.text+0x47940): undefined reference to `Py_Finalize'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/imgCodecs.dir/build.make:552: imgCodecs] Error 1
make[1]: *** [CMakeFiles/Makefile2:84: CMakeFiles/imgCodecs.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

Here is my CMakeList. https://pastebin.com/QkihgBGm

Edit: Adding how I am trying to compile. I do Cmake and a make on my makefile.

Here is the C++ code that I am trying to compile.

// *********** Begin: Run Python script ************************************************************
// Initialize the Python Interpreter
Py_Initialize();
PyRun_SimpleString("import sys");
char buff[FILENAME_MAX]; //create string buffer to hold path
getcwd( buff, FILENAME_MAX);
string current_working_dir(buff);
string shore_working_dir = current_working_dir + 
"/shore_imputation/";
const char * shore_working_dir_c = shore_working_dir.c_str();
qDebug() << shore_working_dir_c;
// Finish the Python Interpreter
Py_Finalize();
// *********** End: Run Python script 
**************************************************************

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

违心° 2025-01-17 07:51:21

经过几个小时的调查,Cmake 似乎区分大小写,并且需要显式调用才能链接到库。

target_link_libraries(SOURCE ${OpenCV_LIBS})
target_link_libraries(SOURCE ${PYTHON_LIBRARIES})

这使它工作并宾果游戏......干杯!

After many hours of investigation, it seems Cmake is case sensitive and it required an explicit call to link to the libraries.

target_link_libraries(SOURCE ${OpenCV_LIBS})
target_link_libraries(SOURCE ${PYTHON_LIBRARIES})

This made it work and bingo... Cheers!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文