使用代码块创建共享对象?

时间:2014-10-16 17:27:44

标签: java c++ java-native-interface codeblocks shared-libraries

我正在尝试学习JNI,但每次我尝试运行java程序时,它都会抛出一个异常,说明它无法在启动时声明的lib路径中找到* .so库 - 这应该会发生。我的印象是它不应该,但后来我意识到我从来没有制作过这样的文件,事实上我正在尝试加载可执行文件(Ubuntu没有明确的文件扩展名)。

无论如何,如何使用代码块将我的cpp文件编译成.so文件。我一直在寻找所有我发现的是复杂的gcc命令,我不太明白。

有关如何从代码块创建共享对象库的任何见解都将是一个很大的帮助。

2 个答案:

答案 0 :(得分:1)

您可以创建类的对象(.o)文件,然后使用-shared标记将它们组合成动态链接库。
根据我的经验,代码块不能为用户提供这样做的能力。你必须使用gcc。

答案 1 :(得分:0)

我在Linux fedorra下使用外壳程序脚本compile_shared.sh

解决了该问题
#!/bin/bash
g++ -I ./include/ -c -fPIC src/MyClass.cpp -o so/MyClass.o
g++ -shared -Wl,-soname,lib_MyClass.so -o so/lib_MyClass.so  so/MyClass.o

在根文件夹中,并调整Codeblock中的构建选项,以使脚本在构建后执行。

代码块

  • 项目->构建选项...
  • 在左侧的树形视图中选择cpp
  • 构建之前/之后的步骤
  • 在“构建后步骤”文本字段中添加“ xterm -T bash ./compile_shared.sh”

这会将文件./src/MyClass.cpp编译为./so/MyClass.o,然后将其编译为./so/lib_MyClass.so