在ruby中使用c++ .so库无法解析的符号
Unresolved symbols using C++ .so libraries inside ruby
我最近接手了一个Ruby on Rails项目的开发,重点是为两个提供高级图像分析功能的自定义库提供一个用户界面。
当我启动webrick服务器时,它似乎可以工作,但是当我尝试上传一些图像,并且需要使用共享对象时,我得到:
> MagickppAPI::LoadImagesList
> Magick::readImages
ruby: symbol lookup error: /usr/local/lib/site_ruby/1.8/i486-linux/cargadorlib.so: undefined symbol: CloneImageInfo
我试过在编译库时传递——no-undefined,所以它不允许未定义的符号,但它编译成功。而且,ldd不显示该库的任何未定义符号:
nobill@ubuntu-10:/usr/local/lib/site_ruby/1.8/i686-linux$ ldd cargadorlib.so
linux-gate.so.1 => (0xb77ca000)
libruby1.8.so.1.8 => /usr/lib/libruby1.8.so.1.8 (0xb769a000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7681000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb767c000)
libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb764a000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7555000)
libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb752f000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb73d0000)
/lib/ld-linux.so.2 (0xb77cb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb73b0000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb73a7000)
我知道我的问题非常具体,所以我不一定期待一个神奇的答案;我将很高兴任何人张贴建议的问题可能在哪里。
终于弄清楚发生了什么。no-undefined标记中的一个错字(实际上是Wl,- no-undefined)使我无法意识到我缺少了一些链接:- lmagick++ -lMagickWand -lMagickCore
相关文章:
- 添加符号 libgtest.so 错误:命令行中缺少 DSO
- libstdc++.so.6:添加符号时出错:命令行中缺少 DSO
- 'dlopen''ing 包含符号的 .so 会导致未定义的符号
- 自定义 Python 构建 - time.so:未定义的符号:PyExc_ValueError
- C++调用lua_dostring来加载具有"require('cjson')"的Lua Scrip引发错误:cjson.so:未定义的符号:lua_getfield
- g++ 未定义的引用,尽管符号存在于 *.so 文件中
- Android本机运行时无法加载符号,即使它们实际上是在加载的.so文件中找到的
- 部署后的Linux qt应用程序-符号查找错误:libQt5Core.so.5未定义的符号:uncv_getDefaul
- 崩溃调查,正在从.so文件中恢复符号
- .so中存在的符号已编译.o引用了它,但链接失败
- libopencv_core.so.2.4:错误添加符号:命令行中缺少DSO
- 在Python脚本中加载.SO文件时未定义的符号错误
- 如何在OSX中打印.so文件的符号列表
- ImportError: /usr/lib/libboost_python.so.1.54.0: 未定义的符号: PyC
- C++ 在 Win DLL 到 Linux SO 转换中将 LPBYTE 更改为无符号字符*后编译器错误
- 如何解决libmysqlclient_r.so符号引用链接错误
- 对符号'BIO_ctrl@@libcrypto.so.10'的未定义引用
- 即使符号存在于.so文件中,也无法加载该符号
- 警告:编译到.so时找不到入口符号start-
- so中未定义的符号(在链接对象中定义)