gpt4 book ai didi

c++ - JNI/C++编译问题

转载 作者:行者123 更新时间:2023-11-30 05:13:11 24 4
gpt4 key购买 nike

我是 C++ 的新手,我尝试编译一个 .so 文件以通过 Java 中的 JNI 运行它。

C++文件夹的目录结构为:

/
/lib/ - this contains a .a file = library.a below
/folder1 - this contains the .cpp .h and .o files

场景 1:

我正在运行以下内容:

g++ -std=c++11 -I$JAVA_HOME/include -Ifolder1/ -I$JAVA_HOME/include/linux -o outputFileName.so inputFileName.cpp -Llib -llibrary.a -fPIC -shared

我收到以下错误:

relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

所有文件和 .so 对象都有 -fPIcflags。有什么问题?

场景 2:

我正在运行以下内容:

g++ -std=c++11 -I$JAVA_HOME/include -Ifolder1/ -I$JAVA_HOME/include/linux -o outputFileName.so inputFileName.cpp -shared

所以没有 -L 和 -l 标志。

我得到 .so 文件并将其放入/usr/lib 中并使用相关命名,即“lib”前缀。当我运行 Java 程序时,我得到:

symbol lookup error: /usr/lib/outputFileName.so: undefined symbol: _ZN3...

我使用 c++filt 反编译符号,我得到了一个类的引用,如下所示:

namespace::Class::Constructor

我检查了类的.cpp文件,构造函数存在。

请帮忙?

最佳答案

查看此处的示例代码,您可以在其中了解 JNI 如何使用其他共享库。

https://github.com/mkowsiak/jnicookbook/blob/master/recipes/recipeNo023/Makefile

看起来您引用了您的 .so 文件使用的某种库。

确保将它们放在您的 LD_LIBRARY_PATH - 而不仅仅是您的 JNI 库中。

关于c++ - JNI/C++编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058610/

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