使用codeblocks创建共享对象?

问题描述 投票:0回答:2

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

无论如何,我怎样才能用代码块把我的cpp文件编译成.so文件。我已经找遍了所有的地方,但我找到的都是复杂的gcc命令,我不太明白。

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

java c++ java-native-interface codeblocks shared-libraries
2个回答
1
投票

你可以创建你的类的对象(.o)文件,然后使用-shared标签将它们组合成一个动态链接的库。根据我的经验,Code blocks并没有为用户提供这样的能力。你将不得不利用gcc。


0
投票

我在Linux fedorra下用一个shell脚本解决了这个问题。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

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

Codeblocks

  • Project -> Build options ...
  • 在左边的树状视图中选择cpp
  • 前期建设步骤
  • 在编译后的步骤中添加 "xterm -T bash .compile_shared.sh"。

这将编译文件 ./src/MyClass.cpp./so/MyClass.o 并在下一步 ./so/lib_MyClass.so.

© www.soinside.com 2019 - 2024. All rights reserved.