gpt4 book ai didi

c++ - 将 SWIG 包装器与其他库链接

转载 作者:行者123 更新时间:2023-11-28 07:28:08 25 4
gpt4 key购买 nike

我有一个要从 Python 调用的 C++ 函数。该函数本身非常简单,但它涉及一个只能在 C++ 中完成的 IPC 调用。要编译该 C++ 代码,需要链接大量其他库。我正在尝试为此使用 SWIG。我有一个看起来像这样的 Makefile:

all: swig object shared

object: swig
${CC} -c ${MODULE}_wrap.cxx ${INCLUDES}

shared:
${CC} -Wl,--verbose -shared ${MODULE}_wrap.o -o _${MODULE}.so

swig:
${SWIG} -c++ -python ${MODULE}.i

有了这个,一切都可以正常编译,但是在 Python 中导入我的模块会出现“ undefined symbol ”错误。如果我将 shared 行更改为:

shared:
${CC} -Wl,--verbose -shared ${MODULE}_wrap.o -o _${MODULE}.so ${LIBS}

它无法用 collect2: ld returned 1 exit status 编译,但没有告诉我确切的错误是什么。详细的链接器输出有很多行说“尝试打开 [某些库] 失败”,但其中少数行说“成功”。难道只是那些说失败的人阻止了链接的发生?我尝试使用 SWIG 模块实现的目标是否可行?

最佳答案

是的,这是可能的。您需要确保在 Python 加载模块时解析您包装的 C/C++ 模块所依赖的共享库。使用 ldd 检查库(Swig 生成的)以查看它依赖于哪些库。最好设置 rpath(运行时路径;类似于:-rpath=/path/to/your/libs for gcc)以在链接模块时指向那些库的位置.或者,您可以在运行 Python 之前适本地设置 LD_LIBRARY_PATH

关于c++ - 将 SWIG 包装器与其他库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340510/

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