gpt4 book ai didi

python - g++ -shared 参数似乎导致了段错误

转载 作者:行者123 更新时间:2023-12-03 07:39:30 25 4
gpt4 key购买 nike

我刚刚开始学习 cpp,来自 python 和 java 的背景。几天前,我决定尝试使用 boost 在 cpp 中嵌入 python。我安装了库,我尝试了很长时间才能让它工作。但是,无论我做什么,我都一直遇到段错误。起初我只是假设我在包含库时做错了,但最终,我发现即使从我的程序中删除了所有与 boost 相关的代码,我仍然遇到了段错误。我什至将程序转换为一个简单的 hello world,但仍然出现段错误!这是我的程序现在的样子:

//#include <boost/python.hpp>
//#include <Python.h>
//using namespace boost::python;

#include <iostream>
using namespace std;

int main() {

//Py_Initialize();
cout << "Test";
}
我使用这两个命令编译了代码:
gcc -c boost.cpp -o boost.o -fPIC
g++ boost.o -o boost -shared
这是运行编译程序的输出:
Segmentation fault
在进一步搞砸之后,我发现如果我删除了 -共享争论:
g++ boost.o -o boost
该程序将按预期运行。这很好,除了为了包含 boost 库,编译器需要这个参数。如果我试图取消注释 #include <boost/python.hpp>在我的代码中添加一行并在没有 的情况下重新编译-共享论点,我得到这个错误:
boost.o: In function `boost::python::api::object::object()':
boost.cpp: (.text._ZN5boost6python3api6objectC2Ev[_ZN5boost6python3api6objectC5Ev]+0x14): undefined reference to `_Py_NoneStruct'
collect2: error: ld returned 1 exit status
我不知道发生了什么。我在 ubuntu 上执行此操作,并使用以下命令安装了 boost:
sudo apt-get install libboost-all-dev
我对 cpp 还比较陌生,所以如果我做了一些完全愚蠢的事情,请随时告诉我!提前感谢您的帮助!

最佳答案

你不需要-shared与boost库链接。您还需要添加 python 库来解决对 _Py_NoneStruct 的 undefined reference .
请注意,库的顺序很重要:

 g++ boost.cpp -o boost -lboost_python38 -lpython3.8
在这里,我添加了 boost_mpi_python如果您需要它们,也可以使用库:
g++ boost.cpp -o boost -lboost_mpi_python38 -lboost_mpi -lboost_serialization -lboost_python38 -lpython3.8
替换 3.8 (和 38 )与您系统上的实际版本。

关于python - g++ -shared 参数似乎导致了段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64774646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com