首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python/C++扩展。导入时,我得到一个未定义的符号错误

Python/C++扩展。导入时,我得到一个未定义的符号错误
EN

Stack Overflow用户
提问于 2019-07-01 14:05:34
回答 1查看 1.2K关注 0票数 3

下面是我的setup.py和UserMethods.cpp文件。

我的问题是:我正在尝试使用distutils创建和安装python包,但我遇到了一些问题。

当我运行python3 setup.py install --user时,没有任何问题。它编译并创建一个build/目录,其中包含一个名为lib.linux-x86_64-3.6的文件。当我检查我的.local/lib/python3.6/site-pacages目录时,有一个名为UserMethods.cpython-36m-x86_64-linux-gnu.so的文件。

当我尝试导入包时出现问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ python3
>>> import UserMethods

这将返回以下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ImportError: ~/.local/lib/python3.6/site-packages/UserMethods.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN12NA62Analysis4Core18AnalyzerIdentifierD1Ev

我不知道如何或在哪里定义这样的符号,或者为什么要创建它。有人知道这个错误是从哪里来的吗?提前谢谢。

编辑:这是setup.py文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from distutils.core import setup, Extension

UM_module = Extension('UserMethods', sources=['UserMethodsModule.cpp'], language='C++',
                        include_dirs=[ ...many... ],
                        extra_compile_args=['-std=c++11'],
                        libraries=['stdc++'],)

setup(name='UserMethods',
      version='1.0',
      ext_modules=[UM_module],
      )

下面是我的UserMethods.cpp文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <Python.h>
#define PY_SSIZE_T_CLEAN
#include "UserMethods.hh"



/*   OUR FUNCTIONS GO HERE   */

static PyObject* UM_test(PyObject *self, PyObject *args){
        const char *command;
        int sts;
        if ( !PyArg_ParseTuple(args, "s", &command) ){
                return NULL;
        }
        sts = system(command);
        return PyLong_FromLong(sts);
}




static PyMethodDef UserMethods[] = {

        {"system", UM_test, METH_VARARGS, "execute shell command."},
        {NULL, NULL, 0, NULL}

};

static struct PyModuleDef UserMethodsModule = {

        PyModuleDef_HEAD_INIT,
        "UserMethods",
        NULL,
        -1,
        UserMethods

};



PyMODINIT_FUNC PyInit_UserMethods(void){

        return PyModule_Create(&UserMethodsModule);

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-03 10:12:40

根据上面的@Holt,这个错误是由于没有导入包含错误中类型定义的库而导致的。

我必须在我的链接步骤中添加到库的路径,我将其添加到Setup.py中扩展函数调用的'extra_link_args‘参数中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56841420

复制
相关文章
MySQL slow_log日志表出现非法字段值
CREATE TABLE slow_log ( start_time timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), user_host mediumtext NOT NULL, query_time time(6) NOT NULL, lock_time time(6) NOT NULL, rows_sent int(11) NOT NULL, rows_examined int(11) NOT NULL, db varchar(512) NOT NULL, last_insert_id int(11) NOT NULL, insert_id int(11) NOT NULL, server_id int(10) unsigned NOT NULL, sql_text mediumblob NOT NULL, thread_id bigint(21) unsigned NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
星哥玩云
2022/08/17
1.6K0
MySQL slow_log日志表出现非法字段值
displaytag如何实现获取到每行的id字段的值。
  使用封装好的框架,有时候,对于一个知识点不熟悉,可能会浪费你大把的时间,我使用displaytag主要是使用它的分页技术,但是客户提出的需求,是获取到每行的id,然后选择一个用户名称(用户id),将他们关联操作,其实业务很简单,但是获取到你想要的这一行,一开始确实难为着我了,后来才发现,很简单。
别先生
2019/06/03
4.8K0
分批拼接SQL IN 查询需要的ID字段值,解决IN 查询的ID过多问题
SQL查询使用的IN条件字段很多的时候,会造成SQL语句很长,大概SQL语句不能超过8K个字符,也有说IN不能超过1000个条件,总之太长了不行,需要拆分条件分批处理。下面提供一个将Int类型的条件字段值进行字符串拼接的方法。看代码:
用户1177503
2021/04/01
2.5K0
小知识科普:随处可见的短ID和短网址
早上收到快递小哥的短信说快递被放在了A地的丰巢快递柜,然鹅这个快递柜我并不知道在哪里。
帅地
2019/11/22
1.7K0
小知识科普:随处可见的短ID和短网址
Android JNI 调用时缓存字段和方法 ID
在 JNI 去调用 Java 的方法和访问字段时,最先要做的操作就是获得对应的类以及对应的方法 id。
音视频开发进阶
2019/07/26
1.1K0
MongoDB-_id字段的含义介绍
MongoDB中的主键无需明确指定,每一条记录被添加到集合之后, MongoDB都会自动添加主键,MongoDB中文档主键的名称叫做 _id,是一个ObjectId类型的数据,格式如下:
小博测试成长之路
2022/12/02
1.1K0
MongoDB-_id字段的含义介绍
POH和POV事件获得屏幕字段的值
在SCREEN显示之前,系统会自动将程序变量值存放到屏幕字段中:在PAI事件中,系统会自动将屏幕字段的值更新到相应的程序变量中。 在SCREEN LOGIC中我们还有POH和POV事件,所以需要调用DYNP_VALUES_READ函数来读取屏幕字段值。
秋白
2022/06/23
1.1K0
Laravel源码解析之用户认证系统(二)
上一节我们介绍了Laravel Auth系统的基础知识,说了他的核心组件都有哪些构成,这一节我们会专注Laravel Auth系统的实现细节,主要关注 Auth也就是 AuthManager是如何装载认证用的看守器(Guard)和用户提供器(UserProvider)以及默认的用户注册和登录的实现细节,通过梳理这些实现细节我们也就能知道应该如何定制Auth认证来满足我们自己项目中用户认证的需求的。
KevinYan
2019/10/13
2.1K0
CA1051:不要声明可见实例字段
字段的主要用途应是作为实现的详细信息。 字段应为 private 或 internal,并应通过使用属性公开这些字段。 在访问某个字段时,可轻松访问属性,而属性访问器中的代码可在扩展类型功能时更改,而不会引入重大更改。
呆呆
2022/01/10
4780
laravel 中字段格式处理
这里举一个简单的示例,在laravel 中,我们应当这样做: 在对应的Order 模型里定义
句小芒
2022/12/29
5070
Laravel 5.4: 特殊字段太长报错 420000 字段太长
laravel 5.4 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。
全栈程序员站长
2021/11/01
9110
关于Int自增字段和GUID字段的性能测试。只有测试,没有分析,呵呵
      最近有两篇关于GUID和Int自增的文章,我是一直使用Int自增的,不习惯使用GUID,感觉GUID很麻烦,用着不方便,性能也比不上Int自增。但是同时我也知道,二者在性能上孰优孰劣,只是感觉和猜测,并没有做测试!我是只相信测试,不相信分析、推断的。可能是由于我一直都没有系统的学习过的原因吧,高分析总是迷迷糊糊,模棱两可的。所以我更详细测试的结果。       一直想做一下这方面的测试来着,但是比较懒了,一直没有测试,看到了两片博文,勾起了我的兴趣,呵呵,测试一回吧。 一、 测试环境 1、 硬
用户1174620
2018/02/26
1.1K0
关于Int自增字段和GUID字段的性能测试。只有测试,没有分析,呵呵
Sql Server 中 根据具体的值 查找该值所在的表和字段
在我们的工作中经常遇到这样一个问题,在页面中保存一条数据,有个字段值为“张三”,但是,不知道这条数据保存在了哪个表中,现在我们想要追踪该值是存储到了那个表的那个字段中,具体要怎么操作呢?下面我们可以借助存储过程来解决这一问题
jamesjiang
2022/11/20
6.4K0
Sql Server 中 根据具体的值 查找该值所在的表和字段
如何使用枚举的组合值
有时我们需要将枚举定义为1,2,4,8.......的值,这样当传入一个3,那么就是表示1,2的组合,如果传入7,那就表示1,2,4的组合。要实现这种功能我们需要用到FlagsAttribute。具体用法如下:
深蓝studyzy
2022/06/16
3K0
Laravel 实现关系模型取出需要的字段
/要。一个机构对应多个授权码,授权码里面的信息很杂乱,但是我取出关联模型的时候想把他们过滤掉。
用户8664418
2021/07/13
1.4K0
Laravel5.3之Query Builder源码解析(上)
说明:本文主要学习Laravel Database模块的Query Builder源码。实际上,Laravel通过Schema Builder来设计数据库,通过Query Builder来CURD数据库。Query Builder并不复杂或神秘,只是在PDO扩展的基础上又开放封闭的包装了一层,提供了fluent api,使得书写的代码也很简洁流畅。在看下Query Builder源码之前,先大概探索下illuminate/database package的目录结构。
botkenni
2019/09/03
9680
点击加载更多

相似问题

where子句上的Laravel非法运算符和值组合

10

InvalidArgumentException:意外值和尾随数据- Laravel

12

with()与belongsTo()关系上的非法运算符和值组合异常

10

Laravel:错误InvalidArgumentException

51

字段'id‘对于Laravel中的UUID字段没有默认值

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文