如何从jar文件创建C库?

时间:2014-08-25 13:51:46

标签: java c jar

我有一个库的jar文件,其内容是一堆 .class 文件

spl
├── acm
│   ├── graphics
│   │   ├── DrawLineElement.class
│   │   ├── EndRegionElement.class
│   │   ├── FinalPathElement.class
│   │   ├── G3DRect.class
│   │   ├── GArc.class
│   │   ├── GCanvas.class
│   │   ├── GCanvasListener.class
│   │   ├── GCompound.class
│   │   ├── GContainer.class
│   │   ├── GDimension.class
│   │   ├── GFillable.class
│   │   ├── GImage.class
│   │   ├── GIterator.class
│   │   ├── GLabel.class
│   │   ├── GLine.class
│   │   ├── GMath.class
│   │   ├── GMouseEvent.class
│   │   ├── GObject.class
│   │   ├── GObjectList.class
│   │   ├── GOval.class
│   │   ├── GPen.class
│   │   ├── GPoint.class
│   │   ├── GPolygon.class
│   │   ├── GRectangle.class
│   │   ├── GRect.class
│   │   ├── GResizable.class
│   │   ├── GRoundRect.class
│   │   ├── GScalable.class
│   │   ├── GTurtle.class
│   │   ├── PathElement.class
│   │   ├── PathList.class
│   │   ├── PathState.class
│   │   ├── PenImage.class
│   │   ├── SetColorElement.class
│   │   ├── SetLocationElement.class
│   │   ├── StartRegionElement.class
│   │   └── VertexList.class
│   ├── gui
│   │   ├── DoubleField.class
│   │   ├── HPanel.class
│   │   ├── IntField.class
│   │   ├── TableConstraints.class
│   │   ├── TableLayout.class
│   │   ├── TablePanel.class
│   │   └── VPanel.class
│   ├── io
│   │   ├── AWTBooleanInputDialog.class
│   │   ├── AWTDialog.class
│   │   ├── AWTDialogModel.class
│   │   ├── AWTIconCanvas.class
│   │   ├── AWTLineInputDialog.class
│   │   ├── AWTMessageCanvas.class
│   │   ├── AWTMessageDialog.class
│   │   ├── CharacterQueue.class
│   │   ├── ConsoleActionListener.class
│   │   ├── ConsoleInputMonitor.class
│   │   ├── ConsoleModel.class
│   │   ├── ConsoleOutputMonitor.class
│   │   ├── ConsoleReader.class
│   │   ├── ConsoleWriter.class
│   │   ├── DialogModel.class
│   │   ├── IOConsole.class
│   │   ├── IODialog.class
│   │   ├── IOModel.class
│   │   ├── StandardConsoleModel.class
│   │   ├── SwingDialogModel.class
│   │   ├── SystemConsole.class
│   │   └── SystemConsoleModel.class
│   ├── program
│   │   ├── AppletStarter.class
│   │   ├── CommandLineProgram.class
│   │   ├── CommandLineProgramLoader.class
│   │   ├── ConsoleProgram.class
│   │   ├── DefaultActionListener.class
│   │   ├── DialogProgram.class
│   │   ├── GObjectProgram.class
│   │   ├── GProgramListener.class
│   │   ├── GraphicsProgram.class
│   │   ├── OldStyleCheckBoxMenuItem.class
│   │   ├── OldStyleMenuItem.class
│   │   ├── ProgramActionListener.class
│   │   ├── ProgramAppletStub.class
│   │   ├── Program.class
│   │   ├── ProgramContentPaneLayout.class
│   │   ├── ProgramFrame.class
│   │   ├── ProgramMenuBar.class
│   │   ├── ProgramMenuBarListener.class
│   │   ├── ProgramStartupListener.class
│   │   └── ProgramWindowListener.class
│   └── util
│       ├── Animator.class
│       ├── Base64OutputStream.class
│       ├── BMPImageSaver.class
│       ├── CancelledException.class
│       ├── DirectGif89Frame.class
│       ├── DOSCommandLine.class
│       ├── EmptyContainer.class
│       ├── EPSImageSaver.class
│       ├── ErrorException.class
│       ├── ExportAppletDialog.class
│       ├── FileChooserFilter.class
│       ├── Gif89Encoder.class
│       ├── Gif89Frame.class
│       ├── GIF89ImageSaver.class
│       ├── Gif89Put.class
│       ├── GifColorTable.class
│       ├── GIFImageSaver.class
│       ├── GifPixelsEncoder.class
│       ├── HexByteOutputStream.class
│       ├── HexInputStream.class
│       ├── ImageSaver.class
│       ├── IndexGif89Frame.class
│       ├── JPEGImageSaver.class
│       ├── JPGImageSaver.class
│       ├── JTFTools.class
│       ├── MailStream.class
│       ├── MediaTools.class
│       ├── NullAudioClip.class
│       ├── NullOutputStream.class
│       ├── OptionTable.class
│       ├── PICImageSaver.class
│       ├── PICTImageSaver.class
│       ├── Platform.class
│       ├── PNGImageSaver.class
│       ├── ProgressBarDialog.class
│       ├── RandomGenerator.class
│       ├── ReverseColorMap.class
│       ├── ReverseColorMap$ColorRecord.class
│       ├── RTFImageSaver.class
│       ├── SecurityManagerThatFails.class
│       ├── SoundClip.class
│       ├── SoundPlayer.class
│       ├── SpeedBarListener.class
│       ├── SubmitOptions.class
│       ├── SunAudioClip.class
│       ├── SwingTimer.class
│       ├── ThreadedMenuAction.class
│       ├── TIFFImageSaver.class
│       ├── TIFImageSaver.class
│       └── TokenScanner.class
├── META-INF
│   └── MANIFEST.MF
└── stanford
    └── spl
        ├── File_openFileDialog.class
        ├── G3DRect_create.class
        ├── G3DRect_setRaised.class
        ├── GArc_create.class
        ├── GArc_setFrameRectangle.class
        ├── GArc_setStartAngle.class
        ├── GArc_setSweepAngle.class
        ├── GButton.class
        ├── GButton_create.class
        ├── GCheckBox.class
        ├── GCheckBox_create.class
        ├── GCheckBox_isSelected.class
        ├── GCheckBox_setSelected.class
        ├── GChooser_addItem.class
        ├── GChooser.class
        ├── GChooser_create.class
        ├── GChooser_getSelectedItem.class
        ├── GChooser_setSelectedItem.class
        ├── GCompound_add.class
        ├── GCompound_create.class
        ├── GEvent_getNextEvent.class
        ├── GEvent_waitForEvent.class
        ├── GImage_create.class
        ├── GInteractor.class
        ├── GInteractor_getSize.class
        ├── GInteractor_setActionCommand.class
        ├── GLabel_create.class
        ├── GLabel_getFontAscent.class
        ├── GLabel_getFontDescent.class
        ├── GLabel_getGLabelSize.class
        ├── GLabel_setFont.class
        ├── GLabel_setLabel.class
        ├── GLine_create.class
        ├── GLine_setEndPoint.class
        ├── GLine_setStartPoint.class
        ├── GObject_contains.class
        ├── GObject_delete.class
        ├── GObject_getBounds.class
        ├── GObject_remove.class
        ├── GObject_rotate.class
        ├── GObject_scale.class
        ├── GObject_sendBackward.class
        ├── GObject_sendForward.class
        ├── GObject_sendToBack.class
        ├── GObject_sendToFront.class
        ├── GObject_setColor.class
        ├── GObject_setFillColor.class
        ├── GObject_setFilled.class
        ├── GObject_setLineWidth.class
        ├── GObject_setLocation.class
        ├── GObject_setSize.class
        ├── GObject_setVisible.class
        ├── GOval_create.class
        ├── GPolygon_addVertex.class
        ├── GPolygon_create.class
        ├── GRect_create.class
        ├── GRoundRect_create.class
        ├── GSlider.class
        ├── GSlider_create.class
        ├── GSlider_getValue.class
        ├── GSlider_setValue.class
        ├── GTextField.class
        ├── GTextField_create.class
        ├── GTextField_getText.class
        ├── GTextField_setText.class
        ├── GTimer.class
        ├── GTimer_create.class
        ├── GTimer_deleteTimer.class
        ├── GTimer_pause.class
        ├── GTimer_startTimer.class
        ├── GTimer_stopTimer.class
        ├── GWindow_addToRegion.class
        ├── GWindow_clear.class
        ├── GWindow_close.class
        ├── GWindow_create.class
        ├── GWindow_delete.class
        ├── GWindow_draw.class
        ├── GWindow_exitGraphics.class
        ├── GWindow_getScreenHeight.class
        ├── GWindow_getScreenWidth.class
        ├── GWindow_repaint.class
        ├── GWindow_requestFocus.class
        ├── GWindow_setRegionAlignment.class
        ├── GWindow_setResizable.class
        ├── GWindow_setTitle.class
        ├── GWindow_setVisible.class
        ├── JavaBackEnd.class
        ├── JBECanvas.class
        ├── JBECommand.class
        ├── JBEConsole.class
        ├── JBEConsole_clear.class
        ├── JBEConsole_getLine.class
        ├── JBEConsole_print.class
        ├── JBEConsole_println.class
        ├── JBEConsole_setFont.class
        ├── JBEConsole_setSize.class
        ├── JBEFileFilter.class
        ├── JBELabel.class
        ├── JBEWindow.class
        ├── Sound_create.class
        ├── Sound_delete.class
        ├── Sound_play.class
        ├── TopCompound.class
        └── TopCompound_create.class

是否可以从该jar文件创建一个C库,以便我可以在我的C应用程序中包含,链接和使用它?如果是,那怎么办?

值得一提的是,根据文档here,我可以访问此库的所有头文件。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您正在寻找Java Native Interface(JNI):

您需要将JNI调用包装到您构建的C库接口中。

特别是,看一下允许C程序启动java JVM并执行java函数的调用API:

http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html

答案 1 :(得分:2)

如果您有可执行jar,则可以将其作为外部进程执行,例如使用system()函数:

system("java -jar MyJar.jar");

它在主机环境中执行命令java -jar MyJar.jar,并在命令完成后返回。

正在执行的命令:

java -jar MyJar.jar

只需运行你的jar文件。

Here你可以找到更多在C中执行外部程序的方法。

作为替代方案,@ dohashi的答案也很好 - 您可以使用JNI。它以两种方式工作。 Here是一个如何使用JNI来调用Java的简单示例 C.的方法。