红联Linux门户
Linux帮助

amd64上碰到的小问题

发布时间:2008-09-23 00:22:20来源:红联作者:Spetrain
第一次在64位系统上(amd64, debian, gcc 4, jdk 1.5.0_10)跑东西, 简单记录下.

程序很简单, java通过jni调用C++封装的动态链接库, 同时用了opencv。这个程序在32位debian上顺利编译运行。

一开始很顺利, 下载opencv源码, 编译生成so(/usr/local/lib), 添加/etc/ld.so.conf.d/opencv.conf, 执行ldconfig, 编译运行sample程序(参照).

接下来编译源码时出错了,发现有个人说在64位上编译要在g++编译时带选项-fPIC, 且一定要加到最前面.

编译成功, 生成出lib***.so, jni加载动态库时, windows下会查找***.dll, 而linux/solaris下会查找lib***.so.

执行的时候却出错:java: symbol lookup error: /opt/MyDemo/libPicMatcherService.so: undefined symbol: _Z24combinePrecomputedHashesPjS_ii

诡异的事情, 那函数明明在, 也不是JNI接口, 只是CPP内部调用的函数, 并且32位上跑都没问题...可能的原因或者是64位, 或者是gcc 4的原因(32位机上用的是gcc 3.*).

后来把该CPP函数的定义中的inline去掉就可以了.
文章评论

共有 0 条评论