首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaCpp:如何指定本地库?

JavaCpp:如何指定本地库?
EN

Stack Overflow用户
提问于 2015-02-02 06:16:02
回答 1查看 1.1K关注 0票数 2

当JavaCpp创建JNI库/linux-x86_64/libjnimynativelib.so时,它在哪里查找本机库libmynativelib.so

使用如下的@Platform注释告诉JavaCpp有关C++头和共享库的信息:

代码语言:javascript
运行
复制
@Platform(include={"MyLibraryHeader.h"}, link = "mynativelib")
@Namespace("mynamespace")
public class MyLibrary {
  ...
}

然后通过JavaCpp编译并运行上面的Java类,如下所示:

代码语言:javascript
运行
复制
javac -cp javacpp.jar MyLibrary.java
java -jar javacpp.jar -cp ../..   # classpath is parent of com/mypackage dir

然后JavaCpp输出:

代码语言:javascript
运行
复制
Generating /<projpath>/jniMyLibrary.cpp
Compiling /<projpath>/linux-x86_64/libjniMyLibrary.so
g++ -I/usr/lib/jvm/java-7-openjdk-amd64/include -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux <path>/jniMyLibrary.cpp -Wl,-rpath,$ORIGIN/ -march=x86-64 -m64 -Wall -O3 -fPIC -shared -s -o /<projpath>/linux-x86_64/libjnimynativelibrary.so -lmynativelib

这就产生了这个错误:

代码语言:javascript
运行
复制
/usr/bin/ld: cannot find -lmynativelib

g++在当前目录()或linux-x86_64子目录中都找不到libmynativelib.so

LD_LIBRARY_PATH=<projdir>帮不上忙。

告诉JavaCpp加载哪个本机库的推荐方式是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-02-04 10:23:15

@Platform(link=)注释已经为JavaCpp指定了要链接到的本机库:

代码语言:javascript
运行
复制
@Platform(include="MyLibraryHeader.h", link="mynativelib")

因此,剩下的工作就是告诉g++在哪里可以找到库libmynativelib.so。这是通过将-L参数通过JavaCpp Xcompiler指令发送到g++来完成的:

代码语言:javascript
运行
复制
java -jar javacpp.jar -cp ... Xcompiler -L<libdir>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28268561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档