linux系统中,编写的C程序调用conio.h,但不行。出现下图提示,这要如何解决呢,怎么才可以调用到conio.h

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux系统中,编写的C程序调用conio.h,但不行。出现下图提示,这要如何解决呢,怎么才可以调用到conio.h相关的知识,希望对你有一定的参考价值。

在/usr/lib/bcc/include中有conio.h文件。。

conio.h不是C标准库中的头文件,在C standard library,ISO C 和POSIX标准中均没有定义。
大部分DOS,Windows 3.x,Phar Lap,DOSX,OS/2 or Win32平台上的C编译器提供此文件,UNIX 和Linux平台的c编译器通常不包含此头文件。……百度百科上有,OK?当然如果你的机子很特殊的话,后面加 -lc调用;如果也没成功换到windows吧。
参考技术A 这个头文件是静态的不止这一个文件,还要关联的两个文件 参考技术B 试试看
gcc -I/usr/lib/bcc/include -o case-7 case-7.c

Linux上从Java程序中调用C函数

  原则上来说,“100%纯Java”的解决方法是最好的,但有些情况下必须使用本地方法。特别是在以下三种情况:

  • 需要访问Java平台无法访问的系统特性和设备;
  • 通过基准测试,发现Java代码比其他语言编写的等价代码慢得多;
  • 其他语言编写的代码已经经过大量测试和调试,并且知道如何将其导出到所有的目标平台上。

  Java平台有一个用于和本地C、C++代码进行互操作的API,称为Java本地接口(JNI)。下面将举例讨论Linux平台下的JNI编程。

1. 创建java类文件

  创建一个nativeTest包,在包下新建HelloNative.java文件。

 1 package nativeTest;
 2 
 3 /**
 4  * Created by jiax on 2016/12/30.
 5  */
 6 public class HelloNative {
 7     // 静态初始化代码块,保证虚拟机在第一次使用该类时就会装载库
 8     static {
 9         System.loadLibrary( "HelloNative" );
10     }
11 
12     // native 关键字表示本地方法,提醒编译器该方法将在外部定义
13     public static native void greeting();
14 
15     // 测试greeting()函数
16     public static void main(String[] args) {
17         greeting();
18     }
19 }

2. 生成.h头文件

  使用以下命令生成一个C的头文件,nativeTest_HelloNative.h

1 javac HelloNative.java
2 cd ..
3 javah nativeTest.HelloNative

  生成的nativeTest_HelloNative.h如下:

 1 /* DO NOT EDIT THIS FILE - it is machine generated */
 2 #include <jni.h>
 3 /* Header for class nativeTest_HelloNative */
 4 
 5 #ifndef _Included_nativeTest_HelloNative
 6 #define _Included_nativeTest_HelloNative
 7 #ifdef __cplusplus
 8 extern "C" {
 9 #endif
10 /*
11  * Class:     nativeTest_HelloNative
12  * Method:    greeting
13  * Signature: ()V
14  */
15 JNIEXPORT void JNICALL Java_nativeTest_HelloNative_greeting
16   (JNIEnv *, jclass);
17 
18 #ifdef __cplusplus
19 }
20 #endif
21 #endif
nativeTest_HelloNative.h

  这个文件是在nativeTest文件夹外生成的,需要拖到nativeTest文件夹里面。  

3. 创建.c文件

  新建一个HelloNative.c文件,写出greeting()函数的实现代码。

1 #include <stdio.h>
2 #include "nativeTest_HelloNative.h"
3 
4 JNIEXPORT void JNICALL Java_nativeTest_HelloNative_greeting(JNIEnv *env, jobject c1) {
5     printf("Hello Native!!\\n");
6 }

4. 编译一个动态链接库

  使用Linux下的gcc编译器,命令如下:

gcc -fPIC -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -shared -o libHelloNative.so HelloNative.c

  生成libMyNative.so文件,此时整个nativeTest目录文件结构如下:

5. 运行测试

  输入如下命令运行HelloNative.class文件。

java nativeTest.HelloNative 

  如果出现如下错误:

  则需要把libHelloNative.so所在文件夹加入java.library.path,使用命令:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:..../nativeTest

  最终结果如下。

 6 总结

  总的来说,将一个本地方法链接到Java程序中需要经过以下5个步骤:

  1. 在Java类中声明一个本地方法;
  2. 运行javah以获得包含该方法的C声明的头文件;
  3. 用C实现该本地方法;
  4. 将代码置于共享类库中;
  5. 在Java程序中加载该类库。

附录——本文中用到的工具版本

JDK——1.8.0_111

gcc——4.8.5

以上是关于linux系统中,编写的C程序调用conio.h,但不行。出现下图提示,这要如何解决呢,怎么才可以调用到conio.h的主要内容,如果未能解决你的问题,请参考以下文章

用C语言编写学生管理系统界面

无法在 Linux Mint 15 中编译简单的 c 程序

c 中conio.h是啥头文件?c++中能用吗

linux下能否引入本地没有的头文件?不能的话怎么办?比如conio.h这个头文件就没有。

怎样用C语言编写这个程序

用C语言编写宿舍管理查询系统