用ffi形式在Node中调用C/C++接口,提示undefined symbol?

riverxs
  • 97

在linux下(Ubuntu 16.04 LTS 版本),使用node-ffi调用C/C++的动态库xxx.so,提示Error: Dynamic Linking Error: /home/riverxs/src/kpm/libKPM.so: undefined symbol: jpeg_stdio_src,如下图:
图片描述
按照提示Google后估计原因是链接生成动态库时未链接libjpeg.so库,所以找不到所需符号,因此在生成动态库时有如下操作:

图片描述

带后缀.o的文件是我从libKPM.a静态库中解包出来的(目的是使用这些目标文件生成需要的动态库)

编译命令:g++ -shared -fPIC -rdynamic -std=c++11 -L/usr/local/lib -ljpeg *.o -o libKPM.so

L/usr/local/lib下是缺失的动态库libjpeg.so所在位置,如下图:
图片描述

可是最后生成的libKPM.so动态库还是缺失刚刚链接过libjpeg.so里的符号,nm命令查找undefined symbol,:如下图:
图片描述

jpeg_stdio_src等符号在libjpeg.so里,按理说,g++ ... 生成动态库时指定libjpeg.so的文件路径即可成功链接上,还是出现如下情况

图片描述

我不是做C/C++的,对C/C++编译链接也不是很懂,此问题困惑已久,Google,Stack Overflow 上都找到过类似问题但都未能解决,还望各位大触指点一二,感激不敬。我会多多散分,ps:其实我是个写前端的:)

补充:ldd libKPM.so查看所需动态库
图片描述

回复
阅读 3.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏