【发布时间】:2020-04-22 15:00:06
【问题描述】:
使用标准的ctypes.CDLL 方法,处理使Python 能够通过Python 的ctypes 模块调用编译成共享库文件(.so 文件)的代码的代码。 C++ 代码执行数值计算,Python 代码主要用作控制器并执行数据分析。一切正常。但是,一旦我在 C++ 代码中包含 jsoncpp 库,Python 就开始抱怨未定义的符号错误,例如 undefined symbol: _ZN4Json5ValueaSES0_ 等。我在 C++ 中使用 jsoncpp 库主要是为了将数据导出到 JSON 文件。在网上搜索了一段时间,似乎没有太多讨论这个问题。知道如何处理吗?
【问题讨论】:
-
如何编译C++代码?
-
带有 -ljsoncpp 标志。 C++ 代码编译成功并提供所需的 JSON 文件。我一从 Python 调用它,就发生了错误。
-
您使用的是什么平台和编译器?
-
它在 Ubuntu 16.04 上。
CC=g++CFLAGS=-I. -std=c++11$(CC) -c -Wall -fPIC -ljsoncpp testcode.cpp -o testcode.o $(CFLAGS)$(CC) -shared -o testcode.so testcode.o。 g++ 的版本是5.4.0 20160609。 Python 版本为 3.7,.so文件通过ctypes.CDLL("./testcode.so")调用 Python。当 C++ 不使用 Jsoncpp 时,Python 调用正常执行。 (抱歉,无法在评论中格式化代码)。 -
-ljsoncpp是一个链接器标志,因此在第二个命令中是必需的(如果存在,它在第一个命令中被忽略)。无论如何,这个问题与 Python (及相关)无关。